代码之家  ›  专栏  ›  技术社区  ›  SIM

古怪的爬行动物

  •  0
  • SIM  · 技术社区  · 8 年前

    我用python scrapy编写了一个脚本来解析craigslist中的不同类别。我在执行脚本时注意到一些奇怪的事情。它运行完美,没有留下任何抱怨。然而,问题是:如果我离开 items.py

    “Items.py”文件包含:

    import scrapy
    
    class CraigItem(scrapy.Item):
        pass
    

    十字轴包含:

    import scrapy 
    from scrapy import Request
    
    class JobsSpider(scrapy.Spider):
    
        name = "category"
        allowed_domains = ["craigslist.org"]
        start_urls = ["https://newyork.craigslist.org/search/egr"]
    
        def parse(self, response):
            jobs = response.xpath('//p[@class="result-info"]')
    
            for job in jobs:
                relative_url = job.xpath('a/@href').extract_first()
                absolute_url = response.urljoin(relative_url)
                title = job.xpath('a/text()').extract_first()
                address = job.xpath('span[@class="result-meta"]/span[@class="result-hood"]/text()').extract_first("")[2:-1]   
                yield Request(absolute_url, callback=self.parse_page, meta={'URL': absolute_url, 'Title': title, 'Address':address})
    
            relative_next_url = response.xpath('//a[@class="button next"]/@href').extract_first()
            absolute_next_url = "https://newyork.craigslist.org" + relative_next_url    
            yield Request(absolute_next_url, callback=self.parse)
    
        def parse_page(self, response):
            url = response.meta.get('URL')
            title = response.meta.get('Title')
            address = response.meta.get('Address')
            compensation = response.xpath('//p[@class="attrgroup"]/span[1]/b/text()').extract_first()
            employment_type = response.xpath('//p[@class="attrgroup"]/span[2]/b/text()').extract_first()
            yield{'URL': url, 'Title': title, 'Address':address, 'Compensation':compensation, 'Employment_Type':employment_type}
    

    我的问题是:没有 项目。py公司

    1 回复  |  直到 8 年前
        1
  •  1
  •   TomáÅ¡ Linhart    8 年前

    你应该了解 Scrapy Items 第一简而言之,Scrapy Items是类似dict的类,用于定义爬行器生成的项。当您从spider中获得一个项目时,它必须是Scrapy项目或dict(或,a) Request 对象)。在spider中,您选择使用第二种方法,即yield plain dict。

    items.py 是由生成的模板 scrapy startproject 命令,该命令定义了空白项类,如果您愿意,可以对其进行增强。但是,由于在spider中没有使用该类,Scrapy也没有使用该类。

    推荐文章