【问题标题】:write a CSV file with Python after scraping text from website [duplicate]从网站上抓取文本后,用 Python 编写一个 CSV 文件 [重复]
【发布时间】:2016-07-16 07:52:25
【问题描述】:

我在从网站上抓取文本后尝试编写一个 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 列。 这可能吗? 任何解决问题的建议都非常感谢!

【问题讨论】:

  • 在循环外部打开文件
  • 并在循环之外关闭它。祝大家好运。
  • 嗨,@PadraicCunningham!我认为是一个不同的问题。也许我需要编辑问题以便更清楚:)
  • @estebanpdl,在循环外打开是否可以解决问题?
  • 我刚刚编辑了这个问题。它部分解决了问题。我要编写的是 为每一行编写一个 CSV 列

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


【解决方案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)

【讨论】:

  • 谢谢,效果很好。但是,我怎样才能将它们写在列中,而不是行中。
  • 不错!您能否添加一个您现在获得的输出示例以及您想要的输出示例?
  • 当然。我要马上修改问题!
  • @estebanpdl,如果你没有得到你期望的格式,你应该问一个与此相关的新问题。
  • @PadraicCunningham,我认为这不值得麻烦 - 可能所需要的只是每行后的换行符。所以另一个问题的答案要么包括这个问题的答案,要么非常小。
猜你喜欢
  • 2019-02-11
  • 2022-09-27
  • 2016-04-06
  • 2019-02-23
  • 2017-01-05
  • 1970-01-01
  • 2016-02-04
  • 2020-03-09
  • 1970-01-01
相关资源
最近更新 更多