熟悉scrapy爬虫框架的人来说,allowed_domains是一个很好用的东西,它可以帮你对请求的地址进行域名限制,过滤掉一些不想访问的域名。

配合上request中的dont_filter属性,简直不要太好用。dont_filter的意思是强制不去重,如果不添加“dont_filter=True”这个属性的话,scrapy默认是不会对重复的url进行再次请求的,如果项目中需要对该页面进行第二次请求的话,就可以在yield Request的时候加上“dont_filter=True”这条属性。例如:

yield Request(url,
              meta={'pn':self.pn},
              callback=self.parse,
              errback=self.error_back,
              dont_filter=True)

但是最近小编遇到这样一种情况:在爬取搜狗的网站的时候,由于搜狗的主域名是sogou.com,哎,一个不小心就在allowed_domains里面写成了错误的“sougou.com”。

这个时候在运行爬虫的时候,就会出现第一次请求和解析都正常,后面的请求都被过滤掉了。原来scrapy框架下的allowed_domains默认只会对第二次以后的请求域名是否符合进行校验,而对于start_requests的url是不会做限制的,因此第一次的请求是可以正常请求和解析的。

分享到