从网站上抓取文本后用 Python 写一个 CSV 文件

write a CSV file with Python after scraping text from website

我正在尝试从网站上抓取文本后编写一个 CSV 文件。我已经找到了这个答案: 但它并没有解决我的问题。

问题是我在写入 CSV 文件后只有一行。

到目前为止,这是我的代码(我使用了 bs4mechanize):

from bs4 import BeautifulSoup
import mechanize

url = "https://www.contratos.gov.co/consultas/detalleProceso.do?numConstancia=15-12-3634534"
br = mechanize.Browser()
search = br.open(url)

# Browser options
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Firefox')]

response = search.read()

soup = BeautifulSoup(response, 'lxml')
text = soup.findAll('td', {'class': 'tablaslistOdd'})
for t in text:
    result = t.text.replace("\t", "").replace("\r", "").replace('\n', '')
    newResult = result.encode('utf-8')
    #print newResult
    for line in newResult:
        output = open('data/myCSVfile.csv', 'w')
        output.write(newResult)
        output.close()

我正在寻找的是为每一行文本编写一个 CSV 列。 这可能吗? 任何解决问题的建议都将受到赞赏!

问题是每次关闭文件并打开它时,它都会重写其中的内容。所以你不需要关闭它。例如,您编写 csv 的代码可能如下所示:

with open('data/myCSVfile.csv', 'w') as f:
    for line in newResult:
        f.write(newResult + '\n')

顺便说一句,with 语句让您不必关心文件的关闭 - 它会为您关闭文件。使用它是一个很好的做法,因为它使您的代码更清晰,并且在您不需要它时立即关闭文件。


要获得您想要的格式,试试这个:

import csv

lines = []
for t in soup.findAll('td', {'class': 'tablaslistOdd'}):
    text = t.text.replace("\t", "").replace("\r", "").replace('\n', '').encode('utf-8')
    lines.append(text)

with open('myCSVfile.csv', 'w') as f:
    writer = csv.writer(f, delimiter=',')
    writer.writerow(lines)