在从网站上抓取文本后用Python编写CSV文件

时间:2016-03-28 23:14:13

标签: python csv web-scraping beautifulsoup text-mining

我在尝试从网站上抓取文字后写一个CSV文件。我已经找到了这个答案:How can write scraped content to a CSV file?但它并没有解决我的问题。

问题是我在写完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列。 这可能吗? 任何解决问题的建议都值得赞赏!

1 个答案:

答案 0 :(得分:1)

问题是,每次关闭文件并打开文件时,它都会重写文件中的内容。所以你不需要关闭它。例如,编写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)