0

私はスクレイピーが初めてで、Webサイトをスクレイピングして必要なすべてのアイテムを取得し、それらをcsvファイルに書き込む必要があります。

私のpipeline.pyコードは

import csv

class example2Pipeline(object):

    def __init__(self):
        self.brandCategoryCsv = csv.writer(open('example.csv', 'wb'))
        self.brandCategoryCsv.writerow(['book_name','dimensions'])

    def process_item(self, item, spider):
        self.brandCategoryCsv.writerow([item['book_name'].encode('utf-8'),
                                    item['dimensions'].encode('utf-8'),
                                    ])
        return item        

上記の項目のファイル内のxpathコードの結果は次のとおりです。spider.py

book_name = i.select('div[@class="slickwrap full"]/div[@id="bookstore_detail"]/div[@class="book_listing clearfix"]/div[@class="bookstore_right"]/div[@class="title_and_byline"]/p[@class="book_title"]/text()').extract()
Result : [u'Rahul']

dimensions = i.select('div[@class="slickwrap full"]/div[@id="bookstore_detail"]/div[@id="main_tab_group"]/div[@class="panes slickshadow"]/div[@class="pane clearfix"]/div[@class="clearfix"]/div[@class="about_author"]/div[@id="book_stats"]/p/a/text()')[0:2].extract()
Result: [u'Pocket',u'Science Fiction & Fantasy',u' 26 pgs']

アイテムについて上記で観察したbook_name場合、リストにはアイテムが1つしかないため、book_name [0]を使用すると、pipeline.pyファイルに書いたコードで文字列をエンコードできます

しかし、 アイテムの場合、リスト内に複数の文字列があったため、上記のコードdimensionsを実行すると次のエラーが発生しますpipeline.py

exceptions.AttributeError: 'list' object has no attribute 'encode'

つまり、リストをエンコードできません。リスト内の個々の要素をpipeline.pyファイルにエンコードできません。

また、列ごとに1つのアイテムを行のようにcsvファイルに書き込みたい

book_name  |   dimensions

Pocket         Science Fiction & Fantasy,  26 pgs

ファイルの追加コードが必要な場合は、spiderここに貼り付けます。

どんな助けでも大歓迎です、事前に感謝します

4

3 に答える 3

0

以下をお試しください。

(item['book_name']).encode('utf-8') ### make sure item['book_name'] is string/unicde becoz they(string/unicode) have encode method not list.

改行の場合は試してみてください。

self.brandCategoryCsv = csv.writer(open('example.csv', 'wb', newline=''))

リスト内の各アイテムをエンコードするには、以下を使用します。

[i.encode('utf-8') for i in item['dimensions']]
于 2012-05-30T11:14:17.030 に答える