特定の HTML コードの Web サイトをスクレイピングし、データを csv ファイルにエクスポートしようとしています。エクスポートされたコードは正規表現と文字コードでいっぱいで、各セルは [' '] で囲まれています。以下は、エクスポートされたデータの一部の例です。
[u'<td colspan="2"><b><big>Universal Universal<br>3 \xbd" ID. to 4"OD. Adapter T409<br><br></big></b><table cellpadding="0" cellspacing="0" style="width: 300px; float:\nright; margin-right: 5px; border: 0px white solid; text-align:\ncenter;"><tr><td style="text-align: center;"><a href="products/images/med/UA1007.jpg" rel="thumbnail" title="UA1007"><img src="products/images/thumbs/UA1007.jpg" width="300px" align="right" style="border: 5px outset #333333;"></a></td></tr><tr><td style="text-align: center;"><table cellpadding="0" cellspacing="0" style="border: 0px solid white; width:\n300px; margin-left: auto; margin-right: auto;"><tr><td style="width: 33%; text-align: center;"></td><td style="width: 34%; text-align: center;"></td><td style="width: 33%; text-align: center;"></td></tr><tr><td></td><td></td><td></td></tr></table></td></tr></table>UA1007<br>\n3 1/2" ID to 4" OD, 7" Length <br>\nFits all pickup models<br><br>\nNow you can hook-up to your MBRP 4" and 5" hardware no matter what size your system. This adaptor is built from T409 stainless steel.<br><br><table><tr></tr></table></td>']
これは、スパイダーに使用しているコードです。
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from MBRP.items import MbrpItem
class MBRPSpider(BaseSpider):
name = "MBRP"
allowed_domains = ["mbrpautomotive.com"]
start_urls = [
"http://www.mbrpautomotive.com/?page=products&part=B1410"
#* thats just one of the url's I have way more in this list *
]
def parse(self, response):
hxs = HtmlXPathSelector(response)
sites = hxs.select('/html')
items = []
for site in sites:
item = MbrpItem()
item['desc'] = site.select('//td[@colspan="2"]').extract()
item['PN'] = site.select('//b/big/a').extract()
items.append(item)
return items
そして、これは私がパイプラインで使用しているコードです。
import csv
class MBRPExporter(object):
def __init__(self):
self.MBRPCsv = csv.writer(open('output.csv', 'wb'))
self.MBRPCsv.writerow(['desc', 'PN'])
def process_item(self, item, spider):
self.MBRPCsv.writerow([item['desc'], item['PN']])
return item
utf-8 でのエンコードが役立つと信じて、このようなパイプライン コードを使用しようとしましたが、これによりエラーが発生しましexceptions.AttributeError: 'XPathSelectorList' object has no attribute 'encode'
た。
import csv
class MBRPExporter(object):
def __init__(self):
self.MBRPCsv = csv.writer(open('output.csv', 'wb'))
self.MBRPCsv.writerow(['desc', 'PN'])
def process_item(self, item, spider):
self.MBRPCsv.writerow([item['desc'].encode('utf-8'), item['PN'].encode('utf-8')])
return item
utf-8でエクスポートする必要があると信じているのは正しいですか? もしそうなら、どうすればそれを行うことができますか?または、エクスポートされたデータをクリーンアップする他の方法はありますか?