1
stcasshern 2017-09-20 21:05:34 +08:00
scrapy webmagic 都可以吧,这些都是爬虫框架基本的功能要求。
另外实际来看,不要每次爬取随机选择 UA (第一条是说这个意思吧? |
2
saximi OP @stcasshern 第一条是说每次爬取从一个列表中选择其中一个 UA,而不是每次都固定用同一个 UA。
看过 scrapy 的说明文档,感觉内容比较庞杂,希望能结合具体完整的例子来学习爬虫,而且希望这个代码例子能实现我列出的这些功能。 |
3
tonghuashuai 2017-09-20 21:33:35 +08:00
这是每一个爬虫的基本功能,找一个爬虫都可以实现这些功能。
|
4
keenwon 2017-09-20 21:37:19 +08:00
按照你的条件:
1、最好用 nodejs,而且 PhantomJS 是坑,可以考虑 chrome headless,已经有比较好的开源库了 2、第 1,3,4 条都很简单 3、第 2 不就是个代理池吗? |
5
fiht 2017-09-20 21:53:08 +08:00
https://gist.github.com/anonymous/4a7f7d2c1efbbaaa515f0031cea9c4b2
写了个简单的,本地环境有问题没直接跑但是大概写了一下思路。能够实现楼主的大部分需求了。 楼上上来就说框架的未免有点太新手不友好了。 其实爬虫就两件事情,模拟用户访问,grep 出想要的内容然后保存起来。 模拟用户访问无非就是发送一个 http request,或者通过浏览器发送 JS 加密过的 http reqeust。这个每个语言都有自己的 http client,应该也是都有自定义类似 User-Agent 头、设置代理 IP 这样的功能。所以第一步的解决方案是看对应语言的 API 的 http client 如何自定义发送内容:比如讲上面说的自定义 UA,如何 POST 数据,如何设置代理 etc... 第二部保存起来,你可以写文件,写数据库,或者写入其他的存储引擎。我们通过第一步就得到 html 代码了,grep 出来可以用正则表达式,或者基于 dom 树去选取。然后就更加不是问题了。 ============ 以上内容面对新手,同样适用于简单爬虫。 |
6
dsg001 2017-09-20 22:00:03 +08:00
https://github.com/geekan/scrapy-examples 好多 demo 还有福利
|
7
stcasshern 2017-09-20 22:04:43 +08:00
@saximi 我的意思是要避免这种情况,我的经验是 实际切换 UA 的话服务器很容易就发现这是爬虫行为。
|
8
hcnhcn012 2017-09-20 22:06:29 +08:00 1
|
9
saximi OP |
10
fiht 2017-09-20 22:40:57 +08:00
楼上让新手用 scrapy 实现随机 UA 和代理 IP 你们是认真的么...
|
11
seven2016 2017-09-20 23:02:59 +08:00
|
12
seven2016 2017-09-20 23:09:38 +08:00
https://github.com/shisiying/tc_zufang
上面地址多打了 k,这是准确地址 |
13
toono 2017-09-21 08:59:50 +08:00
|
14
saximi OP @toono
我学习了您上传的爬虫代码,有一些问题想请您指点。万分感谢了! 1、middlewares.py 中 MyAgentMiddleware 和 DoubanCookieChangeMiddleware 都是下载中间件,为何前者定义中声明了__init__方法,但后者却没有? 2、middlewares.py 中 MyAgentMiddleware 的__init__方法为什么要这个参数:user_agent='' 3、我看了 scrapy 0.25 的官方说明文档,里面提到:“ process_request() 必须返回其中之一: 返回 None、返回一个 Response 对象、返回一个 Request 对象或 raise IgnoreRequest ” 但是您的 MyAgentMiddleware 和 DoubanCookieChangeMiddleware 都没有 return 语句,这是为何? 4、既然 MyAgentMiddleware 和 DoubanCookieChangeMiddleware 都没有返回,这两个类中的 process_request()是否会依序先后被调用,如果会的话,把两个类合并为一个类,在一个类中实现所有的方法是否更合理? 5、pipelines.py 中有的类实现了 open_spider()这个方法,而只有当 spider 被开启时,这个方法被调用。请问 spider 的开启和关闭是在哪里设置的? |
15
saximi OP @toono 在您的爬虫代码中 from_crawler()方法里有这个语句
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened) 请问哪里可以找到对 signals.connect() 这个函数的详细用法说明?谢谢! |
16
saximi OP |
19
saximi OP |
20
toono 2017-09-22 09:46:44 +08:00
@saximi 我运行了一下豆瓣爬虫,没毛病,而且我去查看了有 topic-content class。关于 cookie 并不是需要登录用户才会有的。
关于 signal 你可以参看文档的 signal 一章及 http://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/extensions.html?highlight=signals.connect signal 我理解还是不够深入,所以先不多解释。 |
21
saximi OP @toono 太奇怪了,您爬虫主页是 https: //www.douban.com/group/explore,我无论是用 IE 还是 CHROME 浏览器访问这个页面,打开页面源码后都找不到“ topic-content ”这个字符串呢。
我用 FIDDLER 工具查看访问 https: //www.douban.com/group/explore 时的报文,点击 COOKIE 按钮时提示并无 COOKIE,是在不明白。 |
22
toono 2017-09-25 09:16:30 +08:00
@saximi topic-content 是在帖子里面的,https: //www.douban.com/group/explore 是帖子列表。
|