私はスクレイピーが初めてで、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
ここに貼り付けます。
どんな助けでも大歓迎です、事前に感謝します