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

10011 次点击
所在节点    Python
87 条回复
samray
2017-06-22 10:08:51 +08:00
@fiht 就 scrapy-redis 而言,因为用 redis 取代了 scrapy 自带的 collection.deque,就可以把需要爬取的队列从保存到内存中变成了保存到内存数据库中,但是这个时候,原来配置 collection.deque 使用的调度器就没办法使用了,也没办法进行分布式调度,于是 scrapy-redis 重写了 scrapy 的调度器.
jccg90
2017-06-22 10:15:34 +08:00
哈,别老是欺负京东了。。。搞搞淘宝天猫的试试,感觉比京东的麻烦了很多
xiaomeimei
2017-06-22 10:20:02 +08:00
淘宝天猫阿里妈妈的那叫一个难爬。成功了几天又被封了
samray
2017-06-22 10:24:05 +08:00
@jccg90 @xiaomeimei 淘宝天猫真的欺负不动.是被欺负 :(
ayiis
2017-06-22 10:25:23 +08:00
大概有 10 天了?
原来是你干的...
Ixizi
2017-06-22 10:25:44 +08:00
很强!
bozong
2017-06-22 10:27:32 +08:00
楼主,我们交个朋友吧
samray
2017-06-22 10:29:56 +08:00
@ayiis 我干了什么好事?
samray
2017-06-22 10:31:01 +08:00
@bozong 好啊.可以相互交流,相互学习嘛
samray
2017-06-22 10:33:10 +08:00
@xiaomeimei 其实 QQ 空间也很难爬,想起我之前写的爬取 QQ 空间照片的爬虫. https://github.com/samrayleung/qzonePictureSpider .用了一个星期来解决登陆问题,还有需要根据 cookie 计算密钥.
bozong
2017-06-22 10:38:04 +08:00
@ayiis #45
@samray #48 这位是京东运营团队
myself659
2017-06-22 10:40:06 +08:00
看一下评论,涨知识了
samray
2017-06-22 10:42:29 +08:00
@ayiis 为京东引入流量 :)(不要打我)
sunorg
2017-06-22 10:49:48 +08:00
@cxh116
天猫的容易抓, 加个 cookie 头就行。


速卖通的才难
ayiis
2017-06-22 10:53:13 +08:00
@samray 套路啦
cxh116
2017-06-22 11:02:42 +08:00
@sunorg 加 cookie 可以抓.但速度太难上去了,除非手上高质量代理 IP 多.
vjnjc
2017-06-22 11:07:20 +08:00
借楼问一下这个会触发最新的 gov 的爬虫策略吗?
samray
2017-06-22 11:29:32 +08:00
并没有了解过..
xiaomeimei
2017-06-22 11:57:07 +08:00
@samray 直接用浏览器模拟呀
suliuyes
2017-06-22 11:57:45 +08:00
所有的爬虫,最核心最关键就是代理 ip 的问题,其他都不是事儿。

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

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

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

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

© 2021 V2EX