从京东"窃取"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

10016 次点击
所在节点    Python
87 条回复
binux
2017-06-22 20:47:33 +08:00
我一直认为随机 UA 就是个没卵用的东西
一般选取的 UA 都是常见的,本身访问量很大的;多你爬虫几十万还是几百万根本没区别。
如果对方能从某个 UA 的正常用户中分辨出爬虫,那么你换 UA,对方也能分辨出来。
samray
2017-06-22 21:13:08 +08:00
@binux 这个并不能完全反反爬虫,只是可以提高突破的成功率.何况这个轮转操作并不是非常复杂和耗费资源,更何况我 UA 模拟的并不是正常用户,而是搜素引擎,搜索引擎本身也是爬虫.
samray
2017-06-22 21:14:42 +08:00
@doggg 说明人脉有时候比技术好用 :)
tausi0661
2017-06-23 09:09:14 +08:00
@samray 我能羞羞的问问, 爬来了怎么卖钱?
samray
2017-06-23 09:25:37 +08:00
@tausi0661 这.... 我写这爬虫只是用来分享,并未打算用于商业用途.商业用途就有待你发掘了,但是前提是遵守相关法规 :)
SharkU
2017-06-23 14:16:04 +08:00
@samray 借楼问下,楼主最后破解了 QQ 空间吗?就是如果不使用 phantomjs。
samray
2017-06-23 15:33:27 +08:00
@SharkU  最后我成功登陆并获取到 cookie,但是我是使用了 phantomjs 的,如果不使用的话,我折腾了一星期也不成功.

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

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

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

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

© 2021 V2EX