美しいスープを使用してWebサイトから2セットのデータをスクレイピングしています。それらを2列のcsvファイルに並べて出力したいと考えています。これには spamwriter.writerow([x,y]) 引数を使用していますが、再帰構造にエラーがあるため、csv ファイルに間違った出力が表示されると思います。以下は参照されたコードです:
import csv
import urllib2
import sys
from bs4 import BeautifulSoup
page = urllib2.urlopen('http://www.att.com/shop/wireless/devices/smartphones.html').read()
soup = BeautifulSoup(page)
soup.prettify()
with open('Smartphones_20decv2.0.csv', 'wb') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=',')
for anchor in soup.findAll('a', {"class": "clickStreamSingleItem"},text=True):
if anchor.string:
print unicode(anchor.string).encode('utf8').strip()
for anchor1 in soup.findAll('div', {"class": "listGrid-price"}):
textcontent = u' '.join(anchor1.stripped_strings)
if textcontent:
print textcontent
spamwriter.writerow([unicode(anchor.string).encode('utf8').strip(),textcontent])
私がcsvで取得している出力は次のとおりです。
Samsung Focus® 2 (Refurbished) $99.99
Samsung Focus® 2 (Refurbished) $99.99 to $199.99 8 to 16 GB
Samsung Focus® 2 (Refurbished) $0.99
Samsung Focus® 2 (Refurbished) $0.99
Samsung Focus® 2 (Refurbished) $149.99 to $349.99 16 to 64 GB
問題は、すべてのデバイスの価格が表示されているのに、列 1 にすべてではなく 1 つのデバイス名しか表示されないことです。プログラミング初心者のため、無知なことをお許しください。