Форматирование CSV результатов Scrapy - PullRequest
0 голосов
/ 02 марта 2011

Я пытаюсь очистить веб-сайт, сохранить и отформатировать результаты в файл CSV.Я могу сохранить файл, однако у меня есть три вопроса относительно вывода и форматирования:

  • Все результаты находятся в одной ячейке, а не в нескольких строках.Есть ли какая-то команда, которую я забыл использовать при перечислении элементов, чтобы они отображались в списке?

  • Как можно удалить ['u..., который предшествует каждому результату?(Я искал и видел, как это сделать для print, но не return)

  • Есть ли способ добавить текст к определенным результатам элемента?(Например, можно ли добавить "http://groupon.com" в начало каждого результата deallink?")

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector

from deals.items import DealsItem

class DealsSpider(BaseSpider):
    name = "groupon.com"
    allowed_domains = ["groupon.com"]
    start_urls = [
        "http://www.groupon.com/chicago/all",
        "http://www.groupon.com/new-york/all"
    ]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        sites = hxs.select('//div[@class="page_content clearfix"]')
        items = []
        for site in sites:
            item = DealsItem()
            item['deal1']       = site.select('//div[@class="c16_grid_8"]/a/@title').extract()
            item['deal1link']   = site.select('//div[@class="c16_grid_8"]/a/@href').extract()
            item['img1']        = site.select('//div[@class="c16_grid_8"]/a/img/@src').extract()
            item['deal2']       = site.select('//div[@class="c16_grid_8 last"]/a/@title').extract()
            item['deal2link']   = site.select('//div[@class="c16_grid_8 last"]/a/@href').extract()
            item['img2']        = site.select('//div[@class="c16_grid_8 last"]/a/img/@src').extract()
            items.append(item)
        return items

Ответы [ 2 ]

2 голосов
/ 02 марта 2011

Редактировать: Теперь, когда я понимаю проблему лучше. Должна ли ваша функция parse () выглядеть следующим образом? То есть yield - один элемент за раз вместо возврата списка. Я подозреваю, что список, который вы возвращаете, - это то, что вставляется неправильно отформатированным в одну ячейку.

def parse(self, response):
    hxs = HtmlXPathSelector(response)
    sites = hxs.select('//div[@class="page_content clearfix"]')
    for site in sites:
        item = DealsItem()
        item['deal1']       = site.select('//div[@class="c16_grid_8"]/a/@title').extract()
        item['deal1link']   = site.select('//div[@class="c16_grid_8"]/a/@href').extract()
        item['img1']        = site.select('//div[@class="c16_grid_8"]/a/img/@src').extract()
        item['deal2']       = site.select('//div[@class="c16_grid_8 last"]/a/@title').extract()
        item['deal2link']   = site.select('//div[@class="c16_grid_8 last"]/a/@href').extract()
        item['img2']        = site.select('//div[@class="c16_grid_8 last"]/a/img/@src').extract()
        yield item
0 голосов
/ 02 марта 2011

Посмотрите документацию по трубопроводу: http://doc.scrapy.org/topics/item-pipeline.html

U 'представляет кодировку Unicode. http://docs.python.org/howto/unicode.html

>>> s = 'foo'
>>> unicode(s)
u'foo'
>>> str(unicode(s))
'foo'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...