我在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}
文件中,抓取过程中是否有任何监督?如果是,怎么样?
答案 0 :(得分:1)
您应首先阅读Scrapy Items。简而言之,Scrapy Items是类似dict的类,用于定义蜘蛛生成的项目。当您从spider生成一个项目时,它必须是Scrapy Item或dict(或Request
对象)。在你的蜘蛛中,你选择使用第二种方法,即产生普通字典。
文件items.py
是由scrapy startproject
命令生成的模板,如果您愿意,它可以定义空白Item类以供您增强。但是因为你没有在蜘蛛中使用那个类,所以Scrapy不会使用它。