使用python和漂亮的汤将已删除的数据输出到csv文件的问题

时间:2012-12-19 07:55:03

标签: python csv python-2.7 beautifulsoup

我正在尝试将报废的数据从网站输出到csv文件中,首先我遇到UnicodeEncoding错误但是在使用这段代码后:

if __name__ == "__main__":
reload(sys)
sys.setdefaultencoding("utf-8")

我能够生成csv,下面是相同的代码:

import csv
import urllib2
import sys  
from bs4 import BeautifulSoup
if __name__ == "__main__":
    reload(sys)
    sys.setdefaultencoding("utf-8")
page =    urllib2.urlopen('http://www.att.com/shop/wireless/devices/smartphones.html').read()
soup = BeautifulSoup(page)
soup.prettify()
for anchor in soup.findAll('a', {"class": "clickStreamSingleItem"}):
        print anchor['title']        
        with open('Smartphones.csv', 'wb') as csvfile:
                spamwriter = csv.writer(csvfile, delimiter=',')        
                spamwriter.writerow([(anchor['title'])])     

但是我在输出csv中只获得一个设备名称,我没有任何编程背景,请原谅我的无知。 能帮我解决一下这个问题吗?

1 个答案:

答案 0 :(得分:1)

这是可以预料的;每次找到元素时,都要从头开始编写文件。在循环链接之前,只打开文件一次,然后为找到的每个锚点写行:

with open('Smartphones.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=',')        
    for anchor in soup.findAll('a', {"class": "clickStreamSingleItem"}):
        print anchor['title']        
        spamwriter.writerow([anchor['title'].encode('utf8')])   

使用w打开要写入的文件首先清除文件,然后为每个锚点执行此操作。

至于你的unicode错误,请不惜一切代价避免更改默认编码。相反,正确编码您的行;我在上面的示例中这样做了,您可以删除整个.setdefaultencoding()调用(以及之前的reload())。