0

Webサイトをスクレイプし、結果をCSVファイルに保存してフォーマットしようとしています。ファイルを保存することはできますが、出力とフォーマットに関して3つの質問があります。

  • すべての結果は、複数の行ではなく1つのセルに存在します。アイテムをリストしてリストに表示するときに使用するのを忘れているコマンドはありますか?

  • ['u...各結果の前にあるを削除するにはどうすればよいですか?(私は検索してその方法を確認しましたが、そうではprintありませんreturn

  • 特定のアイテムの結果にテキストを追加する方法はありますか?(たとえば、各取引リンクの結果の先頭に「http://groupon.com」を追加できますか?)

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
4

2 に答える 2

2

編集:問題をよりよく理解できるようになりました。parse() 関数は次のようになりますか? つまりyield、リストを返す代わりに、一度に 1 つの項目を -ing します。あなたが返しているリストは、1つのセルに不適切な形式で詰め込まれているものだと思います。

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
于 2011-03-02T19:56:45.960 に答える
0

アイテム パイプラインのドキュメントをご覧ください: 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'
于 2011-03-02T20:44:05.493 に答える