【问题标题】:Writing to scraped links to a CSV file using Python3使用 Python3 将抓取的链接写入 CSV 文件
【发布时间】:2018-05-02 13:08:29
【问题描述】:

我已经抓取了一个网站的 html 链接,结果大约有 500 个链接。当我尝试将它们写入 csv 文件时,我没有得到只有基本页面的列表。

这是我的代码:

import requests
from bs4 import BeautifulSoup
import csv

page = requests.get('https://www.census.gov/programs-surveys/popest.html')
print(page.status_code)
soup = BeautifulSoup(page.text, 'html.parser')
link_set = set()
for link in soup.find_all('a'):
    web_links = link.get("href")
    print(web_links)

csvfile = open('code_python.csv', 'w+', newline='')
writer = csv.writer(csvfile)
writer.writerow(['Links'])
writer.writerow([web_links])
csvfile.close()

我的 csv 文件中只有两行。标题“链接”和 www.census.gov。我尝试通过在 csv 编写器区域添加另一个 for 循环来使其与众不同,但我得到了类似的结果。

for link in soup.find_all('a'):
    web_links = link.get('href')
    abs_url = join(page, web_links)
    print(abs_url)
    if abs_url and abs_url not in link_set:
        writer.write(str(abs_url) + "\n")
        link_set.add(abs_url)

似乎“web_links”定义应该是我将所有链接放入 csv 文件的位置,但没有骰子。我在哪里犯错了?

【问题讨论】:

    标签: python python-3.x csv beautifulsoup


    【解决方案1】:

    在您的代码中,您在 csv 中写入两行,即

     writer.writerow(['Links'])
     writer.writerow([web_links]) 
    

    这里的 web_links 是检索到的 href 值的最后一个实例。

    我没有看到 set 实例的使用。您可以通过以下方式在 csv 中打印和写入,而无需使用 set instance:

    page = requests.get('https://www.census.gov/programs-surveys/popest.html')
    print(page.status_code)
    soup = BeautifulSoup(page.text, 'html.parser')
    csvfile = open('code_python.csv', 'w+', newline='')
    writer = csv.writer(csvfile)
    writer.writerow(['Links'])
    for link in soup.find_all('a'):
        web_links = link.get("href")
        if web_links:
            print(web_links)
            writer.writerow([web_links])
    csvfile.close()
    

    【讨论】:

    • 谢谢。我一直在查看我的代码,并认为它看起来非常多余,但由于我的技能水平较低,我不太确定事情的发展方向,尤其是循环。
    • 通过更多的练习,您可以建立自己的信心。如果这个答案可以帮助您解决问题,您可以接受这个答案:)
    【解决方案2】:

    您从未将废弃的链接添加到您的set()

    import requests
    from bs4 import BeautifulSoup
    import csv
    
    page = requests.get('https://www.census.gov/programs-surveys/popest.html')
    print(page.status_code)
    soup = BeautifulSoup(page.text, 'html.parser')
    link_set = set()
    for link in soup.find_all('a'):
        web_links = link.get("href")
        print(web_links)
        link_set.add(web_links)
    
    csvfile = open('code_python.csv', 'w+', newline='')
    writer = csv.writer(csvfile)
    writer.writerow(['Links'])
    for link in link_set:
        writer.writerow([link])
    csvfile.close()
    

    【讨论】:

    • 感谢您向我展示 link_set.add 片段。我知道 set() 函数会删除重复的链接,但我认为我所做的已经足够了。看看你的作品,我明白你在说什么,我没有向 link_set 添加任何东西。那是我额头上的一记耳光。感谢您的反馈。
    • 我的荣幸。 :)
    猜你喜欢
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2020-12-27
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    相关资源
    最近更新 更多