BeautifulSoup,在文本文件中保存刮擦结果

时间:2013-09-23 20:30:32

标签: python beautifulsoup

我正在尝试使用BeautifulSoup从表中抓取数据并将其保存到文件中。我写了这个:

import urllib2
from bs4 import BeautifulSoup

url = "http://dofollow.netsons.org/table1.htm"

page = urllib2.urlopen(url).read()
soup = BeautifulSoup(page)

for tr in soup.find_all('tr')[2:]:
    tds = tr.find_all('td')
    print "%s, %s, %s" % (tds[0].text, tds[1].text, tds[2].text)

有效。

然后我尝试将结果写入文件,但它无法正常工作。 :(

logfile = open("log.txt", 'a')             
logfile.write("%s,%s,%s\n" % (tds[0].text, tds[1].text, tds[2].text))   
logfile.close()

如何将我的结果保存在测试文件中?

1 个答案:

答案 0 :(得分:4)

BeautifulSoup为您提供Unicode数据,在将其写入文件之前需要对其进行编码。

如果您使用io库,它会更容易,它允许您使用透明编码打开文件对象:

import io

with io.open('log.txt', 'a', encoding='utf8') as logfile:
    for tr in soup.find_all('tr')[2:]:
        tds = tr.find_all('td')
        logfile.write(u"%s, %s, %s\n" % (tds[0].text, tds[1].text, tds[2].text))

with语句负责为您关闭文件对象。

我使用UTF8作为编解码器,但您可以选择任何可以处理您正在抓取的页面中使用的所有代码点的内容。