从前面一个爬虫帖想到的

2018-03-18 08:04:33 +08:00
 CitizenR

那个爬虫贴在这里:默默的撸了套爬虫...

很多人的关注点在那几个简单粗暴的循环上,虽然的确是略粗暴了点,但对于爬虫来说,这不是重点,重点是:

每个请求之间没有合理的时间停顿

这对于被爬取的服务器才真的是粗暴。

也许有人会说,获取网页后的处理过程(此处甚至包含数据库操作)就是一个给服务器喘息的过程;也许还有人会说每秒几个几十个的请求对于服务器来说小 CASE 不然网站还是关停算了。

暂且不论服务器是否能承受的问题,我想有些人学爬虫根本不知道robots.txt,也没想过这是在免费获取他人网站的信息不应该给他人服务器施加太大压力,他们只想快速获取自己想要的内容。一个热门网站(微博为例),如果爬取的人很多,并且都不停顿甚至加多线程,对于服务器的压力可想而知。

当初学爬虫的时候,作者在书中第一个例子里就加了sleep,并且反复强调这很重要。我也想如此强调,这很重要。

在写不加停顿 /多线程的爬虫时,我们是否应该思考如下问题:

  1. 我爬取的信息有必要这么快获取吗,慢一点是不是也可以?
  2. 我想爬取的信息如果有一定的即时性,官方是否有相应 API ?

一点小小的想法,如果能给大家一点小小的启发,非常荣幸。也欢迎大家讨论自己的爬虫习惯。

4848 次点击
所在节点    Python
23 条回复
Mavious
2018-03-18 16:15:23 +08:00
爬虫抢刷商品。
我以前睡 0.1 秒。后来发现有问题,刷出来的老是已经被人买走了的空页面(大约 5 秒前已经被买走)。
百思不得其解。只好猜测是太快导致数据没下载全。

于是改成睡 0.4 秒,遇到的问题是略慢,提交购买申请时大概慢了个 1 秒(偶尔出现)

我也很苦恼啊。
快了担心数据下载不全,慢了担心人家已经捷足先登。
我预计至少有 6 个机器人在和我争。我不狂刷就要被别的机器人虐。

无奈啊啊啊啊。那就让服务器多劳苦劳苦啦。
linde
2018-03-18 22:47:38 +08:00
LoadRunner 中 Pacing 和 Think time 概念。
sunwei0325
2018-03-19 08:50:07 +08:00
建议看一下 scrapy 母公司的项目- frontera
https://github.com/scrapinghub/frontera

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/439038

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX