繁体   English   中英

使用 BeautifulSoup 从 CSV 中列出的多个 URL 中抓取信息,然后将这些结果导出到新的 CSV 文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM