从网站上抓取文本后用 Python 写一个 CSV 文件
write a CSV file with Python after scraping text from website
我正在尝试从网站上抓取文本后编写一个 CSV 文件。我已经找到了这个答案: 但它并没有解决我的问题。
问题是我在写入 CSV 文件后只有一行。
到目前为止,这是我的代码(我使用了 bs4
和 mechanize
):
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)
我正在尝试从网站上抓取文本后编写一个 CSV 文件。我已经找到了这个答案:
问题是我在写入 CSV 文件后只有一行。
到目前为止,这是我的代码(我使用了 bs4
和 mechanize
):
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)