Это мой первый опыт использования scrapy, и я пытаюсь поместить нужную мне информацию в файл csv, используя конвейер. Казалось, что все работает нормально, пока я не попытался очистить более чем одну страницу, и он начал возвращать пустой файл csv. Я думаю, что проблема заключается в пауке (так как когда я вносил изменения там, он прекратил работать правильно), но я поставлю конвейер на случай, если там что-то не так.Scrapy return blank csv
вот мой паук:
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from indeed.items import IndeedItem
class IndeedSpider(CrawlSpider):
name = "indeed"
allowed_domains = ['www.indeed.com']
start_urls = [
'http://www.indeed.com/jobs?as_and=&as_phr=&as_any=&as_not=&as_ttl=&as_cmp=&jt=all&st=&salary=&radius=50&l=19103&fromage=30&limit=10&sort=&psf=advsrch'
]
rules = (Rule(LinkExtractor(allow=('http://www.indeed.com/jobs?q=&l=19103&radius=50&fromage=30&start=.*'))),)
def parse_item(self, response):
for sel in response.xpath("//div[contains(@class, 'row ')]"):
items = []
jobs = sel.xpath('//a[contains(@data-tn-element, "jobTitle")]/text()').extract()
city = sel.xpath('//span[@class="location"]/text()').extract()
company = sel.xpath('//span[@class="company"]/text()').extract()
for j, c, co in zip(jobs, city, company):
position = IndeedItem()
position['jobs'] = j.strip()
position['city'] = c.strip()
position['company'] = co.strip()
items.append(position)
yield items
А вот мой трубопровод:
from scrapy import signals
from scrapy.xlib.pydispatch import dispatcher
from scrapy.exporters import CsvItemExporter
class IndeedPipeline(object):
def process_item(self, item, spider):
return item
class CsvExportPipeline(object):
def __init__(self):
dispatcher.connect(self.spider_opened, signals.spider_opened)
dispatcher.connect(self.spider_closed, signals.spider_closed)
self.files = {}
def spider_opened(self, spider):
file = open('%s_jobs.csv' % spider.name, 'w+b')
self.files[spider] = file
self.exporter = CsvItemExporter(file)
self.exporter.start_exporting()
def spider_closed(self, spider):
self.exporter.finish_exporting()
file = self.files.pop(spider)
file.close()
def process_item(self, item, spider):
self.exporter.export_item(item)
return item
Любая помощь будет оценена.
Какие статы, когда ползать заканчивается? Он должен сказать, сколько предметов было очищено и т. Д. Может быть, все ваши предметы упали? – Granitosaurus
Итак, он говорит '[scrapy] INFO: Просканировал 0 страниц (на 0 страницах/мин), очистил 0 пунктов (по 0 пунктов/мин)'. Так что, похоже, это часть проблемы. –
есть проблема с вашим ползанием. Как обычно вы отлаживаете это, добавьте 'inspect_response (response, self)' где-то в функции синтаксического анализа и во время обхода сканирования выкинет режим оболочки, который вы можете использовать для проверки объекта 'response'. т. е. проверьте, что ваш xpath находит что-либо. – Granitosaurus