http_crawler 0.3.1.31 → 0.3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/http_crawler/client.rb +225 -44
- data/lib/http_crawler/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 539321e3e69747e02ae880742809d04f5f7ef87bcf878f05092ab23145ecde28
|
4
|
+
data.tar.gz: d6587f26299e869d5b604487f4cc5302fb1bc044fd29ba3d723045f40824c5bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f0356c38ec7e6c0e6e901a77ceacce783219b784c748447807c6e6b6a5488379453e515722e6f991983acef80009d009f1d51f6000f771c9edd96d28d620dd9d
|
7
|
+
data.tar.gz: 5f0d045e1b4dba21941897cc57e6727fdcb942208abe7158fc0324512cd3a2ba90c1b160c0879c8d072cc80cf114a39f1e295f852145cb721be211cbc6984ac7
|
data/lib/http_crawler/client.rb
CHANGED
@@ -113,14 +113,28 @@ module HttpCrawler
|
|
113
113
|
attr_accessor :redirect
|
114
114
|
|
115
115
|
attr_accessor :header
|
116
|
-
#
|
117
|
-
|
118
|
-
|
116
|
+
# 创建时间: 2019/9/16 17:11
|
117
|
+
# 更新时间: 2019/9/16
|
118
|
+
# 作者: Jagger
|
119
|
+
# 方法名称: header
|
120
|
+
# 方法说明: 返回头文件
|
121
|
+
# 调用方式: #header
|
122
|
+
#
|
123
|
+
# @return
|
124
|
+
def header
|
119
125
|
@header ||= init_header
|
120
126
|
end
|
121
127
|
|
122
|
-
|
123
|
-
|
128
|
+
# 创建时间: 2019/9/16 17:08
|
129
|
+
# 更新时间: 2019/9/16
|
130
|
+
# 作者: Jagger
|
131
|
+
# 方法名称: init_header
|
132
|
+
# 方法说明: 初始化头文件
|
133
|
+
# 调用方式: #init_header
|
134
|
+
#
|
135
|
+
# @return
|
136
|
+
#
|
137
|
+
def init_header
|
124
138
|
@header = {
|
125
139
|
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
|
126
140
|
"Accept-Encoding": "gzip, br",
|
@@ -131,58 +145,164 @@ module HttpCrawler
|
|
131
145
|
}
|
132
146
|
end
|
133
147
|
|
148
|
+
# 创建时间: 2019/9/16 17:08
|
149
|
+
# 更新时间: 2019/9/16
|
150
|
+
# 作者: Jagger
|
151
|
+
# 方法名称: update_header
|
152
|
+
# 方法说明: 更新头文件,局部更新
|
153
|
+
# 调用方式: #update_header
|
154
|
+
#
|
155
|
+
# @return
|
156
|
+
#
|
134
157
|
def update_header(parameter = {})
|
135
|
-
|
136
|
-
@header = init_header
|
158
|
+
@header = @header.merge(parameter.symbolize_keys)
|
137
159
|
end
|
138
160
|
|
161
|
+
# 创建时间: 2019/9/16 17:10
|
162
|
+
# 更新时间: 2019/9/16
|
163
|
+
# 作者: Jagger
|
164
|
+
# 方法名称: replace_header
|
165
|
+
# 方法说明: 替换头文件
|
166
|
+
# 调用方式: #replace_header
|
167
|
+
#
|
168
|
+
# @option parameter [Hash] Hash模式传参
|
169
|
+
# @param parameter [Hash]
|
170
|
+
# {
|
171
|
+
# "": , # 参数说明
|
172
|
+
# }
|
173
|
+
#
|
174
|
+
# @return
|
175
|
+
#
|
176
|
+
def replace_header(parameter = {})
|
177
|
+
@header = parameter.symbolize_keys
|
178
|
+
end
|
179
|
+
|
180
|
+
|
139
181
|
attr_accessor :cookies
|
140
|
-
#
|
141
|
-
|
142
|
-
|
143
|
-
|
182
|
+
# 创建时间: 2019/9/16 17:12
|
183
|
+
# 更新时间: 2019/9/16
|
184
|
+
# 作者: Jagger
|
185
|
+
# 方法名称: cookies
|
186
|
+
# 方法说明: 返回头文件
|
187
|
+
# 调用方式: #cookies
|
188
|
+
#
|
189
|
+
# @return
|
190
|
+
#
|
191
|
+
def cookies
|
192
|
+
@cookies ||= init_cookies
|
144
193
|
end
|
145
194
|
|
146
|
-
|
147
|
-
|
195
|
+
# 创建时间: 2019/9/16 17:13
|
196
|
+
# 更新时间: 2019/9/16
|
197
|
+
# 作者: Jagger
|
198
|
+
# 方法名称: init_cookies
|
199
|
+
# 方法说明: 初始化头文件
|
200
|
+
# 调用方式: #init_cookies
|
201
|
+
#
|
202
|
+
# @return
|
203
|
+
#
|
204
|
+
def init_cookies
|
148
205
|
@cookies = {}
|
149
206
|
end
|
150
207
|
|
208
|
+
# 创建时间: 2019/9/16 17:13
|
209
|
+
# 更新时间: 2019/9/16
|
210
|
+
# 作者: Jagger
|
211
|
+
# 方法名称: update_cookies
|
212
|
+
# 方法说明: 更新cookies,局部替换
|
213
|
+
# 调用方式: #update_cookies
|
214
|
+
#
|
215
|
+
# @option parameter [Hash] Hash模式传参
|
216
|
+
# @param parameter [Hash]
|
217
|
+
# {
|
218
|
+
# "": , # 参数说明
|
219
|
+
# }
|
220
|
+
#
|
221
|
+
# @return
|
222
|
+
#
|
151
223
|
def update_cookies(parameter = {})
|
152
|
-
|
224
|
+
case parameter
|
225
|
+
when String
|
226
|
+
hash = {}
|
227
|
+
parameter.scan(/([^=]*)=([^;]*);? ?/) do |m|
|
228
|
+
hash[:"#{m[0]}"] = m[1]
|
229
|
+
end
|
230
|
+
@cookies = @cookies.merge(hash.symbolize_keys)
|
231
|
+
when Hash
|
232
|
+
@cookies = @cookies.merge(parameter.symbolize_keys)
|
233
|
+
else
|
234
|
+
raise "cookies传入格式错误"
|
235
|
+
end
|
236
|
+
@cookies
|
237
|
+
end
|
153
238
|
|
239
|
+
# 创建时间: 2019/9/16 17:20
|
240
|
+
# 更新时间: 2019/9/16
|
241
|
+
# 作者: Jagger
|
242
|
+
# 方法名称: inheritance_cookies
|
243
|
+
# 方法说明: 继承上一个请求的set-cookies
|
244
|
+
# 调用方式: #inheritance_cookies
|
245
|
+
#
|
246
|
+
# @return
|
247
|
+
#
|
248
|
+
def inheritance_cookies
|
154
249
|
@response.cookies.each do |cookie|
|
155
|
-
@cookies.
|
250
|
+
@cookies[:"#{cookie.name}"] = cookie.value
|
156
251
|
end unless @response.blank?
|
157
|
-
|
158
|
-
nil
|
252
|
+
@cookies
|
159
253
|
end
|
160
254
|
|
161
|
-
#
|
162
|
-
#
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
#
|
255
|
+
# 创建时间: 2019/9/16 17:19
|
256
|
+
# 更新时间: 2019/9/16
|
257
|
+
# 作者: Jagger
|
258
|
+
# 方法名称: auto_proxy=
|
259
|
+
# 方法说明: 自动更新代理设置
|
260
|
+
# 调用方式: #auto_proxy=
|
261
|
+
#
|
262
|
+
# @return
|
263
|
+
#
|
170
264
|
def auto_proxy=(value)
|
171
265
|
Rails.logger.debug "自动更新代理"
|
172
266
|
@auto_proxy = value
|
173
267
|
update_proxy if (value == true && @proxy.blank?)
|
174
268
|
end
|
175
269
|
|
176
|
-
#
|
270
|
+
# 创建时间: 2019/9/16 17:23
|
271
|
+
# 更新时间: 2019/9/16
|
272
|
+
# 作者: Jagger
|
273
|
+
# 方法名称: proxy_api
|
274
|
+
# 方法说明: 代理使用的api方法名
|
275
|
+
# 调用方式: #proxy_api
|
276
|
+
#
|
277
|
+
# @return
|
278
|
+
#
|
177
279
|
def proxy_api
|
178
280
|
@proxy_api ||= "my"
|
179
281
|
end
|
180
282
|
|
181
|
-
#
|
283
|
+
# 创建时间: 2019/9/16 17:24
|
284
|
+
# 更新时间: 2019/9/16
|
285
|
+
# 作者: Jagger
|
286
|
+
# 方法名称: proxy_params
|
287
|
+
# 方法说明: 调用代理 api使用的参数
|
288
|
+
# 调用方式: #proxy_params
|
289
|
+
#
|
290
|
+
# @return
|
182
291
|
def proxy_params
|
183
292
|
@proxy_params ||= {key: "default"}
|
184
293
|
end
|
185
294
|
|
295
|
+
# 创建时间: 2019/9/16 17:24
|
296
|
+
# 更新时间: 2019/9/16
|
297
|
+
# 作者: Jagger
|
298
|
+
# 方法名称: update_proxy
|
299
|
+
# 方法说明: 更新代理,如果未传入代理则自动获取代理
|
300
|
+
# 调用方式: #update_proxy
|
301
|
+
#
|
302
|
+
# @option proxy [Hash] Hash模式传参
|
303
|
+
# @param proxy [Hash]
|
304
|
+
#
|
305
|
+
# @return
|
186
306
|
def update_proxy(proxy = {})
|
187
307
|
proxy = proxy.symbolize_keys
|
188
308
|
if (proxy.blank?)
|
@@ -194,7 +314,14 @@ module HttpCrawler
|
|
194
314
|
end
|
195
315
|
|
196
316
|
|
197
|
-
#
|
317
|
+
# 创建时间: 2019/9/16 17:25
|
318
|
+
# 更新时间: 2019/9/16
|
319
|
+
# 作者: Jagger
|
320
|
+
# 方法名称: update_proxy?
|
321
|
+
# 方法说明: 是否自动更新代理,如果自动更新代理 则更新代理返回 true,否则返回false
|
322
|
+
# 调用方式: #update_proxy?
|
323
|
+
#
|
324
|
+
# @return
|
198
325
|
def update_proxy?
|
199
326
|
if @auto_proxy
|
200
327
|
self.update_proxy
|
@@ -207,6 +334,15 @@ module HttpCrawler
|
|
207
334
|
|
208
335
|
# 获取proxy
|
209
336
|
# 通过调用 api 获取代理或者通过自定义设置代理
|
337
|
+
# 创建时间: 2019/9/16 17:26
|
338
|
+
# 更新时间: 2019/9/16
|
339
|
+
# 作者: Jagger
|
340
|
+
# 方法名称: get_proxy
|
341
|
+
# 方法说明: 获取proxy、通过调用 api 获取代理或者通过自定义设置代理
|
342
|
+
# 调用方式: #get_proxy
|
343
|
+
#
|
344
|
+
# @return
|
345
|
+
#
|
210
346
|
def get_proxy
|
211
347
|
proxy_ip = nil
|
212
348
|
begin
|
@@ -252,16 +388,17 @@ module HttpCrawler
|
|
252
388
|
nil
|
253
389
|
end
|
254
390
|
|
255
|
-
#
|
256
|
-
#
|
391
|
+
# 初始化http请求前置条件
|
392
|
+
# 创建时间: 2019/9/16 17:27
|
393
|
+
# 更新时间: 2019/9/16
|
257
394
|
# 作者: Jagger
|
258
|
-
# 方法名称:
|
259
|
-
# 方法说明:
|
260
|
-
# 调用方式: #
|
395
|
+
# 方法名称: http
|
396
|
+
# 方法说明: 创建Http的对象,用于发送请求
|
397
|
+
# 调用方式: #http
|
261
398
|
#
|
262
399
|
# @return HTTP
|
263
|
-
|
264
|
-
|
400
|
+
def http
|
401
|
+
|
265
402
|
h = HTTP
|
266
403
|
# 自动重定向。最大重定向次数 max_hops: 5
|
267
404
|
h = h.follow(max_hops: 5) if self.redirect == true
|
@@ -287,13 +424,20 @@ module HttpCrawler
|
|
287
424
|
h
|
288
425
|
end
|
289
426
|
|
290
|
-
# 初始化http请求前置条件
|
291
|
-
def http
|
292
|
-
init_http
|
293
|
-
end
|
294
|
-
|
295
427
|
|
296
|
-
#
|
428
|
+
# 创建时间: 2019/9/16 17:27
|
429
|
+
# 更新时间: 2019/9/16
|
430
|
+
# 作者: Jagger
|
431
|
+
# 方法名称: get
|
432
|
+
# 方法说明: 发送get请求
|
433
|
+
# 调用方式: #get
|
434
|
+
#
|
435
|
+
# @param path [String] uri路由地址
|
436
|
+
# @param params [Hash] get参数
|
437
|
+
# @param limit [Integer] 错误递归次数
|
438
|
+
#
|
439
|
+
# @return
|
440
|
+
#
|
297
441
|
def get(path, params = {}, limit = 3)
|
298
442
|
raise "Client uri为空" unless self.uri
|
299
443
|
request do
|
@@ -306,13 +450,32 @@ module HttpCrawler
|
|
306
450
|
end
|
307
451
|
end
|
308
452
|
|
309
|
-
#
|
453
|
+
# 创建时间: 2019/9/16 17:29
|
454
|
+
# 更新时间: 2019/9/16
|
455
|
+
# 作者: Jagger
|
456
|
+
# 方法名称: get_uri
|
457
|
+
# 方法说明: 直接发送uri的get请求
|
458
|
+
# 调用方式: #get_uri
|
459
|
+
#
|
460
|
+
# @return
|
310
461
|
def get_uri
|
311
462
|
raise "Client uri为空" unless self.uri
|
312
463
|
request {http.get(self.uri.to_s, :ssl_context => @ctx)}
|
313
464
|
end
|
314
465
|
|
315
466
|
# 发送 post 请求
|
467
|
+
# 创建时间: 2019/9/16 17:29
|
468
|
+
# 更新时间: 2019/9/16
|
469
|
+
# 作者: Jagger
|
470
|
+
# 方法名称: post
|
471
|
+
# 方法说明: 发送 post 请求
|
472
|
+
# 调用方式: #post
|
473
|
+
#
|
474
|
+
# @param path [String] uri路由地址
|
475
|
+
# @param params [Hash] get参数
|
476
|
+
# @param format [] 请求参数的模式::params、:form、:body、:json、:form。
|
477
|
+
#
|
478
|
+
# @return
|
316
479
|
def post(path, params = {}, format = :form)
|
317
480
|
raise "Client uri为空" unless self.uri
|
318
481
|
request {http.post((self.uri + path).to_s, format => params, :ssl_context => @ctx)}
|
@@ -323,6 +486,16 @@ module HttpCrawler
|
|
323
486
|
protected :response=
|
324
487
|
|
325
488
|
# 出现如果验证码,切换代理
|
489
|
+
# 创建时间: 2019/9/16 17:31
|
490
|
+
# 更新时间: 2019/9/16
|
491
|
+
# 作者: Jagger
|
492
|
+
# 方法名称: validation_to_proxy?
|
493
|
+
# 方法说明: 验证是否出现验证码,出现如果验证码,切换代理
|
494
|
+
# 调用方式: #validation_to_proxy?
|
495
|
+
#
|
496
|
+
# @param r 默认为本身的 @response
|
497
|
+
#
|
498
|
+
# @return
|
326
499
|
def validation_to_proxy?(r = response)
|
327
500
|
# 判断是否出现验证码
|
328
501
|
if r.validation_page?
|
@@ -338,7 +511,15 @@ module HttpCrawler
|
|
338
511
|
protected
|
339
512
|
|
340
513
|
|
341
|
-
#
|
514
|
+
# 创建时间: 2019/9/16 18:01
|
515
|
+
# 更新时间: 2019/9/16
|
516
|
+
# 作者: Jagger
|
517
|
+
# 方法名称: request
|
518
|
+
# 方法说明: 发送请求,所有请求都会走该方法
|
519
|
+
# 调用方式: #request
|
520
|
+
#
|
521
|
+
# @return
|
522
|
+
#
|
342
523
|
def request(&block)
|
343
524
|
raise "必须定义块" unless block_given?
|
344
525
|
n = max_error_num
|
data/lib/http_crawler/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: http_crawler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jagger
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-09-
|
11
|
+
date: 2019-09-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|