从京东"窃取"150+万条数据 (爬虫)

2017-06-21 21:57:56 +08:00
 samray

博客地址:从京东"窃取"150+万条数据

github 地址: jd_spider

使用 scrapy, scrapy-redis, graphite 实现的京东分布式爬虫,以 mongodb 实现底层存储。分布式 实现,解决带宽和性能的瓶颈,提高爬取的效率。实现 scrapy-redis 对进行 url 的去重 以及调度,利用 redis 的高效和易于扩展能够轻松实现高效率下载:当 redis 存储或者访问速 度遇到瓶颈时,可以通过增大 redis 集群数和爬虫集群数量改善

爬取策略

获取 <a href> 标签里面的 url 值,然后迭代爬取,并且把 url 限定在 xxx.jd.com 范围内,防止无限广度的问题。

反爬虫策略

禁用 cookie

通过禁用 cookie, 服务器就无法根据 cookie 判断出爬虫是否访问过网站

伪装成搜索引擎

要说最著名的爬虫是谁?肯定是搜索引擎,它本质上也是爬虫,而且是非常强大的爬虫。 而且这些爬虫可以光明正大地去爬取各式网站,相信各式网站也很乐意被它爬。 现在可以通过修改 user-agent 伪装成搜索引擎

 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)',
 'Mozilla/5.0 (compatible; Bingbot/2.0; +http://www.bing.com/bingbot.htm)',
 'Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)',
 'DuckDuckBot/1.0; (+http://duckduckgo.com/duckduckbot.html)',
 'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)',
 'Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)',
 'ia_archiver (+http://www.alexa.com/site/help/webmasters; crawler@alexa.com)',

轮转 user-agent

为了提高突破反爬虫策略的成功率,定义多个 user-agent, 然后每次请求都随机选择 user-agent。本爬虫实现了一个 RotateUserAgentMiddleware 类来实现 user-agent 的轮转

代理 IP

使用代理 IP, 防止 IP 被封

爬虫状态监控

将分布式爬虫 stats 信息(请求个数,item 下载个数,dropItem 个数,日志)保存到 redis 中 实现了一个针对分布式的 stats collector,并将其结果用 graphite 以图表形式动态实时显示

并发请求和深度控制

通过 setting.py 中的 CONCURRENT_REQUESTS = 32 配置来控制并发请求数量,通过 DepthMiddle 类的 DEPTH_LIMIT=max 参数来控制爬虫的的递归深度

运行截图

http://imgur.com/a/Q9Usi

http://imgur.com/a/FBvay

http://imgur.com/a/zgFWa

10173 次点击
所在节点    Python
87 条回复
supman
2017-06-22 00:04:58 +08:00
休斯顿的?
xingzhi
2017-06-22 00:46:18 +08:00
关键还是在于代理。
Thoxvi
2017-06-22 01:11:27 +08:00
@samray

不我的意思是似乎少打字了…
samray
2017-06-22 06:56:38 +08:00
@Thoxvi README 上面已经修改,但是 V2EX 就没办法修改 :(
samray
2017-06-22 07:00:53 +08:00
@fate0 我是用这个中间件来管理代理 IP 的  https://github.com/aivarsk/scrapy-proxies,随机选择代理 IP,不可用就把代理 IP 丢了. 只是还是会出现运行到一段时间之后,代理 IP 全部被丢完的情况
samray
2017-06-22 07:05:05 +08:00
@supman 不太懂你表达的意思?
gaohigh
2017-06-22 08:00:38 +08:00
厉害了,屌屌
cxh116
2017-06-22 08:07:43 +08:00
天猫难抓,禁止蜘蛛,无 cookie 直接重定向到登录页添加 cookie.
yongliang
2017-06-22 08:45:42 +08:00
不错不错,马克下
vipwpcom
2017-06-22 08:50:22 +08:00
二话不说,丢个星
fate0
2017-06-22 09:02:38 +08:00
@samray https://github.com/aivarsk/scrapy-proxies 这代码也是从一个文本读内容啊,完全可以自己实现一个 download middleware 从 redis 里取。
Arrowing
2017-06-22 09:24:42 +08:00
666666,感谢楼主科普
HuangLibo
2017-06-22 09:29:31 +08:00
分布式爬虫, 看起来很好玩, 赶紧给个星
RubyJack
2017-06-22 09:31:30 +08:00
https://36kr.com/p/5078918.html 你的爬虫会把自己送进监狱吗?
figofuture
2017-06-22 09:41:32 +08:00
mark
ajan
2017-06-22 09:49:34 +08:00
按 2017 年 6 月 1 日,《网络安全法》以及最新刑事司法解释:

未经授权爬取用户手机通讯录超过 50 条记录,老板进去最高可达 3 年

未经授权抓取用户淘宝交易记录超过 500 条的,老板进去最高可达 3 年

未经授权读取用户运营商网站通话记录超过 500 条以上的,老板进去最高可达 7 年

未经授权读取用户公积金社保记录的超过 50000 条的,老板进去最高可达 7 年
samray
2017-06-22 09:52:35 +08:00
@cxh116 爬取难度 淘宝>天猫>京东.淘宝的反爬实在太强.即使用上我提到的所有反反爬虫策略.半个小时内就会爬不动,即使爬取频率不高.
samray
2017-06-22 09:53:34 +08:00
@ajan 只是爬取商品信息和商品评论,并未涉及到交易记录.
fiht
2017-06-22 09:57:10 +08:00
我后来才知道,没有调度功能的爬虫在某种意义上来说不算是分布式爬虫...
不过 redis 真的好用~~
samray
2017-06-22 09:58:51 +08:00
@fate0 我知道,所以我之前提到的文本的代理 IP 会用尽就是我在爬虫过程中实际遇到的问题.可能我表达不够清晰,让你误解了.抱歉.其实我觉得爬虫的反反爬虫策略是一个问题.还有需要重点关注的是去重.之前我写的单机爬虫我都是用布隆过滤器来实现去重.只是这个项目是分布式的,用到 redis.就直接在 redis 去重.但是感觉效率没有布隆过滤器高.尤其是我这种直接从<a>标签中爬取 URL 的策略.去重就尤其重要.

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

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

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

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

© 2021 V2EX