Scrapy爬行动作奇怪

时间:2017-09-20 13:23:58

标签: python python-3.x web-scraping scrapy scrapy-spider

我在python scrapy中编写了一个脚本来解析craigslist中的不同类别。我注意到执行脚本的一些奇怪的事情。它运行完美,不留任何投诉。但问题是:如果我将93.0留空,如下所示,它对抓取过程没有任何影响。我的问题是它在我的scrapy项目中做了什么呢?提前谢谢。

" 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} 文件中,抓取过程中是否有任何监督?如果是,怎么样?

1 个答案:

答案 0 :(得分:1)

您应首先阅读Scrapy Items。简而言之,Scrapy Items是类似dict的类,用于定义蜘蛛生成的项目。当您从spider生成一个项目时,它必须是Scrapy Item或dict(或Request对象)。在你的蜘蛛中,你选择使用第二种方法,即产生普通字典。

文件items.py是由scrapy startproject命令生成的模板,如果您愿意,它可以定义空白Item类以供您增强。但是因为你没有在蜘蛛中使用那个类,所以Scrapy不会使用它。