zoukankan      html  css  js  c++  java
  • [scrapy.spidermiddlewares.offsite] DEBUG: Filtered offsite request to

    在做爬虫项目时,出现了一个问题,解析一个网站二次爬取时没有获取到数据,就写了一个测试程序试了下,测试程序如下

    import scrapy
    from scrapy.linkextractors import LinkExtractor
    from scrapy.spiders import CrawlSpider, Rule

    class ZhenaiSpider(CrawlSpider):
        name = 'zhenai'
        allowed_domains = ['www.zhenai.com']
        start_urls = ['http://www.zhenai.com/zhenghun/beijing/1']


        rules = (
            Rule(LinkExtractor(allow=r'http://www.zhenai.com/zhenghun/beijing/d+'), callback='parse_item', follow=False),
        )


        def parse_item(self, response):
            a_list = response.xpath('//div[@class="content"]/table//tr/th/a')
            for a in a_list:
                item = {}
                title = a.xpath('./text()').extract_first()
                item['title'] = title
                detail_url = a.xpath('./@href').extract_first()
                yield scrapy.Request(url=detail_url, meta={'item': item}, callback=self.parse_info)


        def parse_info(self, response):
            print('ok')
            item = response.meta['item']


            yield item

    结果无法打印ok字符, 也没有错误日志出现

    打开调试模式,发现 [scrapy.spidermiddlewares.offsite] DEBUG: Filtered offsite request to 'album.zhenai.com': <GET http://album.zhenai.com/u/109625287>,原来是二次解析的域名被过滤掉了,解决办法

    解决办法一:yield scrapy.Request(url=detail_url, meta={'item': item}, callback=self.parse_info, dont_filter=True)

    原理:忽略allowed_domains的过滤

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

  • 相关阅读:
    每日扫盲(四):java之Netty原理和使用
    每日扫盲(三):id_rsa、id_rsa.pub 、authorized_keys
    每日扫盲(二):xxx.dll文件的作用
    每日扫盲(一):java的rmi
    工具列表
    hadoop学习笔记(七):hadoop2.x的高可用HA(high avaliable)和联邦F(Federation)
    window.history对象
    window.location对象
    推送本地文件夹到github
    docker的使用01
  • 原文地址:https://www.cnblogs.com/xiaohuhu/p/12257344.html
Copyright © 2011-2022 走看看