【问题标题】:Scrapy Start_request parseScrapy Start_request 解析
【发布时间】:2015-05-01 05:59:07
【问题描述】:

我正在编写一个抓取脚本来搜索和抓取网站的结果。我需要从网站搜索项目并从搜索结果中解析每个 url。我从 Scrapy 的 start_requests 开始,在那里我将传递搜索查询并重定向到另一个函数 parse,它将从搜索结果中检索 URL。最后我调用了另一个函数 parse_item 来解析结果。我能够提取所有搜索结果 url,但我无法解析结果(parse_item 不起作用)。代码如下:

# -*- coding: utf-8 -*-

from scrapy.http.request import Request
from scrapy.spider import BaseSpider

class xyzspider(BaseSpider):
    name = 'dspider'
    allowed_domains = ["www.example.com"]
    mylist = ['Search item 1','Search item 2']
    url = 'https://example.com/search?q='

    def start_requests(self):
        for i in self.mylist:
            i = i.replace(' ','+')
            starturl = self.url+ i

            yield Request(starturl,self.parse)

    def parse(self,response):
        itemurl =  response.xpath(".//section[contains(@class, 'search-results')]/a/@href").extract()
        for j in itemurl:
            print j
            yield Request(j,self.parse_item)

    def parse_item(self,response):
        print "hello"

        '''rating = response.xpath(".//ul(@class = 'ratings')/li[1]/span[1]/text()").extract()
        print rating'''

谁能帮帮我。谢谢。

【问题讨论】:

    标签: python python-2.7 web-scraping scrapy scrapy-spider


    【解决方案1】:

    我收到了过滤的异地请求错误。我将允许的域从 allowed_domains = www.xyz.com 更改为 xyz.com 效果很好。

    【讨论】:

      【解决方案2】:

      您的代码看起来不错。所以你可能需要使用 Request 属性 dont_filter 设置为 True:

      yield Request(j,self.parse_item, dont_filter=True)
      

      来自docs

      dont_filter (boolean) – 表示此请求不应被调度程序过滤。当您想要多次执行相同的请求以忽略重复过滤器时使用此选项。小心使用它,否则你会陷入爬行循环。默认为 False。

      无论如何,我建议您查看管道项目。 这些用于使用命令处理抓取的项目:

      yield my_object
      

      Item pipelines 用于对蜘蛛产生的所有内容进行后处理。

      【讨论】:

        猜你喜欢
        • 2021-05-27
        • 2014-07-02
        • 1970-01-01
        • 2015-08-13
        • 2014-03-27
        • 2013-04-01
        • 1970-01-01
        • 2019-09-18
        • 2019-08-01
        相关资源
        最近更新 更多