Итак, я потратил довольно много времени на просмотр документации и руководств по Scrapy, и с тех пор я подключился к самому базовому сканеру.Однако я не могу получить вывод в файл JSON.Я чувствую, что упускаю что-то очевидное, но я не смог ничего вспомнить, посмотрев на ряд других примеров и попробовав несколько разных вещей.
Чтобы быть тщательным, я включу всесоответствующего кода.То, что я пытаюсь получить здесь, это некоторые конкретные предметы и связанные с ними цены.Цены будут меняться довольно часто, и предметы будут меняться с гораздо меньшей частотой.
Вот мои items.py:
class CartItems(Item):
url = Field()
name = Field()
price = Field()
А вот паук:
from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.item import Item, Field
from Example.items import CartItems
class DomainSpider(CrawlSpider):
name = 'example.com'
allowed_domains = ['example.com']
start_urls = ['http://www.example.com/path/to/desired/page']
def parse(self, response):
hxs = HtmlXPathSelector(response)
cart = CartItems()
cart['url'] = hxs.select('//title/text()').extract()
cart['name'] = hxs.select('//td/text()').extract()[1]
cart['price'] = hxs.select('//td/text()').extract()[2]
return cart
Если, например, я запускаю hxs.select ('// td / text ()'). Extract () [1] из оболочки Scrapy по URL-адресу http://www.example.com/path/to/desired/page,, тогда я получаю следующий ответ:
u'Text field I am trying to download'
РЕДАКТИРОВАТЬ:
Хорошо, поэтому я написал конвейер, следующий за тем, который я нашел в вики (я как-то пропустил этот раздел, когда копался в этом последние несколько дней),только что изменил использование JSON вместо XML.
from scrapy.xlib.pydispatch import dispatcher
from scrapy import signals
from scrapy.contrib.exporter import JsonItemExporter
class JsonExportPipeline(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_items.json' % spider.name, 'w+b')
self.files[spider] = file
self.exporter = JsonItemExporter(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
Это выводит файл "example.com_items.json", но все, что он содержит, это "[]".Итак, мне что-то здесь не так.Проблема с пауком, или конвейер сделан неправильно?Очевидно, что я что-то здесь упускаю, так что, если кто-то может подтолкнуть меня в правильном направлении или связать со мной какие-нибудь примеры, которые могут помочь, это было бы очень ценно.