【发布时间】:2020-02-20 00:02:32
【问题描述】:
我有一个 45k+ 行的 CSV 文件,每一个都包含同一个域的不同路径——它们在结构上彼此相同——而且每一个都是可点击的。我设法使用 BeautifulSoup 来抓取每个标题和内容,并通过print 函数,我能够验证抓取器。但是,当我尝试将收集到的信息导出到新的 CSV 文件时,我只得到了最后一个 URL 的街道名称和描述,而不是我预期的全部。
from bs4 import BeautifulSoup
import requests
import csv
with open('URLs.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
site = requests.get(row['addresses']).text
soup = BeautifulSoup(site, 'lxml')
StreetName = soup.find('div', class_='hist-title').text
Description = soup.find('div', class_='hist-content').text
with open('OutputList.csv','w', newline='') as output:
Header = ['StreetName', 'Description']
writer = csv.DictWriter(output, fieldnames=Header)
writer.writeheader()
writer.writerow({'StreetName' : StreetName, 'Description' : Description})
输出 CSV 如何在每一行上包含输入 CSV 文件中相应 URL 行的街道名称和描述?
【问题讨论】:
-
你没有保存你在任何地方抓取的数据......?此外,变量和函数名称应遵循
lower_case_with_underscores样式。 -
在您浏览时将 StreetName 和 Description 写入字符串或列表。您只看到最后一个的原因是您每次都覆盖前一个。
-
@guicalmeida,您可以发布您的输入 CSV 文件的示例吗?通过了解您的回答,我可以稍微改进一下答案。
标签: python csv web-scraping beautifulsoup