scrapy_ [scrapy.spidermiddlewares.offsite] DEBUG: Filtered offsite request to ’XXXX‘

问题描述:

在使用scrapy框架进行爬虫时,当解析完请求start_urls的响应进行二次访问的时候,出现了无法访问的情况,系统过滤 了我的请求 .

# -*- coding: utf-8 -*-
import scrapy


class LuboavSpider(scrapy.Spider):
    name = 'photo'
    allowed_domains = ['https://www.XXXX.com']
    start_urls = ['https://www.XXXX.com/art/type/id/11.html']
    base_urls = 'https://www.XXXX.com/art/type/id/11/page/{}.html'
    detail_base_urls = 'https://www.XXXX.com'

    def parse(self, response):
        print("response.status", response.status)
        detail_url = response.xpath('//table//td[1]/a/@href')
        for i in detail_url:
            print(i.extract())
            yield scrapy.Request(self.detail_base_urls + i.extract(), callback=self.detail_parse)

    def detail_parse(self, response):
        print("dfasgasgas")
        print("detail_parse", response.status)

报错信息:

2018-12-27 00:01:06 [scrapy.spidermiddlewares.offsite] DEBUG: Filtered offsite request to 'www.XXXX.com': <GET https://www.XXXX.com/art/detail/id/114522.html>

原因分析:
因为 Request中请求的 URL 和 allowed_domains 中的域名冲突,所以将你的新的url过滤掉了,无法请求

        yield scrapy.Request(self.detail_base_urls + i.extract(), callback=self.detail_parse)
        
解决:
法一:? 在 Request 请求参数中,设置 dont_filter = True ,Request 中请求的 URL 将不通过 allowed_domains 过滤。

        yield scrapy.Request(self.detail_base_urls + i.extract(), callback=self.detail_parse,dont_filter=True)

法二: 将allowed_domains = ['www.xxxx.com']更改为allowed_domains = ['xxxx.com'] 即更换为对应的一级域名

法三: 将allowed_domains行代码注释掉(不推荐使用)

参考:
https://blog.csdn.net/weixin_41607151/article/details/80515030
https://blog.csdn.net/weixin_42523052/article/details/80778037 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值