记糗百的一次爬虫经历
事情起源:
一次无聊的想要做点东西,发现数据库没点东西,然后就想到去糗百爬点东西,然后就开始了入坑。。。
工具:Python3 scrapy框架
想起以前的爬虫经历,几乎没遇到过什么防爬虫措施,于是就直接开始了调试准备get√xpath表达式的时候,有了第一个坑,
scrapy shell http://www.qiushibaike.com/text/
然后!果断报错了,
然而我竟然就去谷歌 twisted
框架的这个错误,结果可想而知没有答案,最后突然想到一点,好像。。。糗百一直被作为爬虫入门博客的例子。。。估计是被爬怕了,加了 反爬虫机制
,,,
- 于是开始谷歌scrapy伪装浏览器怎么写,最后在项目配置文件setting.py中的
DEFAULT_REQUEST_HEADERS
加入以下伪装:
好了,'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en-US,en;q=0.5', 'Accept-Encoding': 'gzip, deflate', 'Cookie':'''_xsrf=2|da663c38|074b39a46ce47715d5a3376af4b154b7|1490869563; _qqq_uuid_="2|1:0|10:1490869563|10:_qqq_uuid_|56:ZGY2MzY5ZmI1MTJkNmIzZjQ1ODM1YTVlYTE4NjQ0ZjBhOWEzMmViNg==|cc49d57f4513ac2d3d35b453fe41b11c35c66ac1eb6f214ad7f81f013e3789ba"; Hm_lvt_2670efbdd59c7e3ed3749b458cafaa37=1490869564; Hm_lpvt_2670efbdd59c7e3ed3749b458cafaa37=1490869564; _ga=GA1.2.136222138.1490869564; _gat=1''', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', 'If-None-Match': "9de88e87dd2d3140edc8af02a7bc9516598bc9fc" }
爬虫调试没问题了,next,scrapy shell http://www.qiushibaike.com/text/
写好了一切逻辑后,代码如下:`
python-- coding: utf-8 --
import scrapy
from qiushibaike.items import TextItem
class TextSpider(scrapy.Spider):
name = “text”
allowed_domains = [“qiushibaike.com”]
start_urls = [‘http://qiushibaike.com/text/page/1']
def parse(self, response):
item = TextItem()
li = response.xpath('''//*[@class='content']/span''')
liContent = list()
for i in li:
liContent.append(''.join(i.xpath('text()').extract()))
item['content'] = liContent
yield item
#提取出下一页链接
nextPage = response.xpath("//*[@class='next']/parent::a/@href").extract()
if len(nextPage) > 0:
nextPage = 'http://www.qiushibaike.com' + nextPage[0]
yield scrapy.Request(nextPage, callback=self.parse)
* 然后,
```shell
scrapy crawl text
这里去糗百网站看了,text这个栏目是有35页的,但我爬到第12页就报错了,
,
- 好吧,503错误,Web 服务器目前无法处理HTTP 请求,具体自行维基百度,这个错误对于爬虫来说,还是很容易看出来是哪出问题的:爬虫速度太快,服务器承载不了报错。既然太快,那就需要限制爬虫,好在作为一个强大的爬虫框架,scrapy也有想到了这一点,也有相应的限制措施,以下是在setting.py文件下增加如下配置即可,
如此,爬虫便可以爬完35页了,AUTOTHROTTLE_ENABLED = True #开启scrapy的自动限速扩展 注:默认不开启,False # The initial download delay AUTOTHROTTLE_START_DELAY = 5 #爬虫启动等待时间,单位秒 # The maximum download delay to be set in case of high latencies AUTOTHROTTLE_MAX_DELAY = 60 # 爬虫最大等待时间,这里是照搬官网,用不到这个设置 DOANLOAD_DELAY = 5 # 爬虫中间下载件每次下载的间隔时间 CONCURRENT_REQUESTS_PER_DOMAIN = 1 # 爬虫的对单个IP进行并发请求的最大值
缺点:速度贼慢!
总结:以前爬一些小网站没有这些对应的反爬虫措施,倒是大意了,作为一只爬虫,最基本的怎能不伪装成浏览器呢。。。