前言
阅读本文中如果发现笔者有讲的不清楚的地方,可以查看scrapy的开发文档(第七节有网址)。
PS:本来的目标是微博,但由于微博的反爬措施太严格了(非要爬也不是不可以,但如果不用splash等包套娃最后八成要变成正则表达式大战),起不到作为示范的作用,我们把目标改成贴吧。
如果有把目标定为微博但惨遭新浪访客系统重定向的读者,可以试着带上抓包的cookie和header再次爬取,或者把爬虫伪装成搜索引擎爬虫。
目标
爬取贴吧首页推送的所有帖子(不包括ajax),并且获取文字评论。
使用scrapy shell测试目标
在开始编写爬虫之前,我们要先使用scrapy shell对爬取的目标进行测试,获取其路径。
1 为什么
如果在项目本体进行测试,每次测试都要运行整个项目。
在scrapy shell中测试,只需要输入爬取的url和测试语句。
2 尝试直接进入tieba.baidu.com
打开cmd,输入scrapy shell www.tieba.baidu.com,可以看到返回了:2020-11-15 21:47:56 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None)
状态码为200,链接也正常,输入view(response)让scrapy在浏览器中打开响应,确认页面是正常的。
3 准备header
保险起见,我们还是要准备header。
使用抓包工具(浏览器F12就可以)对贴吧进行抓包,获取header(请求头)。
在settings.py文件下增加USER-AGENT,放入一组UA头(可以使用我们之前介绍过的fake_useragent生成),例如:
USER_AGENT=[ 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.517 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.3