Попытка Использовать ItemExporter в Scrapy - PullRequest
2 голосов
/ 26 июня 2011

Я пытаюсь реализовать в своем коде какой-то экспортер предметов.Мой основной код прямо сейчас, чтобы привести si.com в среднее значение, как пример.Результаты представлены в одной длинной строке, и я хотел бы изменить вывод, так как он хранится в файле .csv, чтобы вместо этого поместить его в столбец.Ниже я включаю паука, и экспортер предметов, который я использую, является просто основным, найденным здесь. То, что я действительно хочу, это взять каждый элемент и сохранить результаты в столбцах рядом с каждымдругой вместо одной длинной строки со всеми тремя результатами подряд.

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.exporter import XmlItemExporter

from mlb1.items import MlbItem

class MLBSpider(BaseSpider):
   name = "si.com"
   allowed_domains = ["si.com"]
   start_urls = [
       http://sportsillustrated.cnn.com/baseball/mlb/stats/2011/batting/ml_0_byBATTING_AVG.html"
       ]

   def parse(self, response):
       hxs = HtmlXPathSelector(response)
       sites = hxs.select('//div[@class="cnnSASD_sport-mlb"]/div[@class="cnnSASD_page-leadersPlayersExpandedStats"]/div[@class="cnnStatsContent"]')
       items = []
       for site in sites:
           item = MlbItem()
           item['name'] = site.select('//table[@class="cnnSASD_first"]/*/td[@class="cnnCol1"]//text()').extract()
           item['team'] = site.select('//table[@class="cnnSASD_first"]/*/td[@class="cnnCol2"]//text()').extract()
           item['batave'] = site.select('//table[@class="cnnSASD_first"]/*/td[@class="cnnColHighlight"]//text()').extract()
           items.append(item)
       return items

Я все еще очень новичок в Python Coding, так что документация по scrapy не очень помогает.Когда я пытаюсь запустить код, я получаю сообщение об ошибке: «ImportError: Ошибка загрузки объекта« mlb1.pipelines.XmlExportPipeline »: невозможно импортировать сигналы имен».Буду очень признателен за любую помощь.

1 Ответ

2 голосов
/ 27 июня 2011

См. Этот пример для извлечения имен игроков

def parse(self, response):
    hxs = HtmlXPathSelector(response)
    player_names = hxs.select('//table[@class="cnnSASD_first"]//td[@class="cnnCol1"]/a')
    for p_name in player_names:
        l = XPathItemLoader(item=MlbItem(), selector=p_name )
        l.add_xpath('name', 'text()')
        yield l.load_item()

В командной строке scrapy используйте --set FEED_URI=items.csv --set FEED_FORMAT=csv.Это сбросит ваши имена в файл items.csv.Не нужно писать свой экспортер фидов.Вы можете смоделировать свой xpath для названий команд в аналогичных строках

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...