请问有没有这样的Python爬虫代码范例?
实现爬虫功能的同时,也进行了以下处理:
1、修改了 HTTP 请求头,每次爬取时随机选择一个使用
2、将真实 IP 地址进行了屏蔽,每次爬取时从 IP 池中选择一个使用
3、初始访问页面是第一页,根据页面上的选择页控件,爬完当前页后接着爬取下一页直至全部爬取完毕
4、爬取的数据存储到数据库
5、最好能用到 PhantomJS 这个浏览器——这个条件不强求,但是有的话最好
请问有满足上述条件的爬虫代码范例可供学习么?
非常感谢!
请问有没有这样的Python爬虫代码范例?
scrapy webmagic 都可以吧,这些都是爬虫框架基本的功能要求。
另外实际来看,不要每次爬取随机选择 UA (第一条是说这个意思吧?
我无法理解你的问题。
第一条是说每次爬取从一个列表中选择其中一个 UA,而不是每次都固定用同一个 UA。
看过 scrapy 的说明文档,感觉内容比较庞杂,希望能结合具体完整的例子来学习爬虫,而且希望这个代码例子能实现我列出的这些功能。
这是每一个爬虫的基本功能,找一个爬虫都可以实现这些功能。
按照你的条件:
1、最好用 nodejs,而且 PhantomJS 是坑,可以考虑 chrome headless,已经有比较好的开源库了
2、第 1,3,4 条都很简单
3、第 2 不就是个代理池吗?
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 树去选取。然后就更加不是问题了。
============
以上内容面对新手,同样适用于简单爬虫。
https://github.com/geekan/scrapy-examples 好多 demo 还有福利
我的意思是要避免这种情况,我的经验是 实际切换 UA 的话服务器很容易就发现这是爬虫行为。
建议用 scrapy 框架
1,2 两条可以去看 http://scrapoxy.io/
存储到数据库的话可以参考各大数据库的 python 驱动然后写到 pipeline 里
感谢各位的指点,提供的资料我要仔细看看,顿首拜!
楼上让新手用 scrapy 实现随机 UA 和代理 IP 你们是认真的么…
https://github.com/shisiying/tc_zufang
上面地址多打了 k,这是准确地址
我学习了您上传的爬虫代码,有一些问题想请您指点。万分感谢了!
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 的开启和关闭是在哪里设置的?
在您的爬虫代码中 from_crawler()方法里有这个语句
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
请问哪里可以找到对 signals.connect() 这个函数的详细用法说明?谢谢!
douban.py 这个代码是否是写得比较早,从现在的页面来看,下面的语句中 class 为 topic-content 的标签是不存在的?
item[‘body’] = response.xpath(’//div[class=“topic-content”]’)
不知为何,我点击“显示 Gist 代码”没有任何显示,直接把网址复制到浏览器也打不开,看不到代码呢
你需要 fq
您代码中的 DoubanCookieChangeMiddleware 类用于动态改变 cookie。但是在 douban.py 程序中并没有输入用户和密码的登录动作,为什么会有 cookie ?
我运行了一下豆瓣爬虫,没毛病,而且我去查看了有 topic-content class。关于 cookie 并不是需要登录用户才会有的。
关于 signal 你可以参看文档的 signal 一章及 http://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/extensions.html?highlight=signals.connect
signal 我理解还是不够深入,所以先不多解释。
太奇怪了,您爬虫主页是 https: //www.douban.com/group/explore,我无论是用 IE 还是 CHROME 浏览器访问这个页面,打开页面源码后都找不到“ topic-content ”这个字符串呢。
我用 FIDDLER 工具查看访问 https: //www.douban.com/group/explore 时的报文,点击 COOKIE 按钮时提示并无 COOKIE,是在不明白。
topic-content 是在帖子里面的,https: //www.douban.com/group/explore 是帖子列表。

