http_crawler 0.3.1.31 → 0.3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|