[英]Scrape information from multiple URLs listed in a CSV using BeautifulSoup and then export these results to a new CSV file
我有一个 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 行的街道名称和描述?
您需要在同一级别打开两个文件,然后在每次迭代中进行读写。 像这样的东西:
from bs4 import BeautifulSoup
import requests
import csv
with open('URLs.csv') as a, open('OutputList.csv', 'w') as b:
reader = csv.reader(a)
writer = csv.writer(b, quoting=csv.QUOTE_ALL)
writer.writerow(['StreetName', 'Description'])
# Assuming url is the first field in the CSV
for url, *_ in reader:
r = requests.get(url)
if r.ok:
soup = BeautifulSoup(r.text, 'lxml')
street_name = soup.find('div', class_='hist-title').text.strip()
description = soup.find('div', class_='hist-content').text.strip()
writer.writerow([street_name, description])
我希望它有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.