我正在从网站上抓取一些数据,并且可以使用以下引用的代码来做到这一点:
import csv
import urllib2
import sys
import time
from bs4 import BeautifulSoup
from itertools import islice
page = urllib2.urlopen('http://shop.o2.co.uk/mobile_phones/Pay_Monthly/smartphone/all_brands').read()
soup = BeautifulSoup(page)
soup.prettify()
with open('O2_2012-12-21.csv', 'wb') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=',')
spamwriter.writerow(["Date","Month","Day of Week","OEM","Device Name","Price"])
oems = soup.findAll('span', {"class": "wwFix_h2"},text=True)
items = soup.findAll('div',{"class":"title"})
prices = soup.findAll('span', {"class": "handset"})
for oem, item, price in zip(oems, items, prices):
textcontent = u' '.join(islice(item.stripped_strings, 1, 2, 1))
if textcontent:
spamwriter.writerow([time.strftime("%Y-%m-%d"),time.strftime("%B"),time.strftime("%A") ,unicode(oem.string).encode('utf8').strip(),textcontent,unicode(price.string).encode('utf8').strip()])
现在,问题是我正在抓取的所有价格值中的 2 个具有不同的 html 结构,然后是其余值。因此,我的输出 csv 对那些显示“无”值。网页上价格的正常 html 结构是
<span class="handset">
FREE to £79.99</span>
对于这 2 个值的结构是
<span class="handset">
<span class="delivery_amber">Up to 7 days delivery</span>
<br>"FREE on all tariffs"</span>
我现在得到的结果显示第二个 html 结构的None而不是Free on all dutys ,在第二个结构中的双引号下提到了所有关税上的免费价格值,而它在第一个结构中的任何引号之外
请帮我解决这个问题,请原谅我的无知,因为我是编程新手。