【问题标题】:open .txt file and save output in csv file打开 .txt 文件并将输出保存在 csv 文件中
【发布时间】:2022-01-17 14:52:06
【问题描述】:

我想使用 beautifulsoup 打开一个 txt 文件(包含多个链接)和剪贴标题。 我的 txt 文件包含这样的链接:

https://www.lipsum.com/7845284869/
https://www.lipsum.com/56677788/
https://www.lipsum.com/01127111236/

我的代码:

import requests as rq
from bs4 import BeautifulSoup as bs

with open('output1.csv', 'w', newline='') as f:
    url = open('urls.txt', 'r', encoding='utf8')
    request = rq.get(str(url))
    soup = bs(request.text, 'html.parser')
    title = soup.findAll('title')
    pdtitle = {}
    for pdtitle in title:
        pdtitle.append(pdtitle.text)
f.write(f'{pdtitle}')

我想打开所有 txt 文件链接并从链接中删除标题。主要问题是在 url 变量中打开 txt 文件不起作用。如何打开文件并将数据保存到csv?

【问题讨论】:

    标签: python web-scraping beautifulsoup


    【解决方案1】:

    您的代码不起作用,因为内部 URL 是所有 URL。你需要一一运行:

    import requests as rq
    from bs4 import BeautifulSoup as bs
    with open(r'urls.txt', 'r') as f:
        urls = f.readlines()
    with open('output1.csv', 'w', newline='') as f:
        for url in urls:
            request = rq.get(str(url))
            soup = bs(request.text, 'html.parser')
            title = soup.findAll('title')
            pdtitle = {}
            for pdtitle in title:
                pdtitle.append(pdtitle.text)
        f.write(f'{pdtitle}')
    

    【讨论】:

    • 它适用于第一个 url,但我想运行所有 url,因为我需要运行大约 1000 个 url。不能一一运行。
    • for循环会一个接一个地运行
    【解决方案2】:

    您的网址可能无法正常工作,因为正在读取您的网址时带有回车符:\n。您需要先删除文本,然后再将它们放入列表中。

    另外,您正在使用.find_all('title'),这将返回一个列表,这可能不是您正在寻找的。您可能只想要第一个标题,仅此而已。在这种情况下,.find('title') 会更好。我在下面提供了一些可能的更正。

    from bs4 import BeautifulSoup
    import requests
    
    filepath = '...'
    with open(filepath) as f:
        urls = [i.strip() for i in f.readlines()]
    
    titles = []
    for url in urls:
        soup = BeautifulSoup(requests.get(url).content, 'html.parser')
        title = soup.find('title') # Note: will find the FIRST title only
        titles.append(title.text) # Grabs the TEXT of the title only, removes HTML
    
    new_csv = open('urls.csv', 'w') # Make sure to prepend with desired location, e.g. 'C:/user/name/urls.csv'
    for title in titles:
        new_csv.write(title+'\n') # The '\n' ensures a new row is written
    new_csv.close()
    f.close()
    

    【讨论】:

    • 有用而且有效。
    猜你喜欢
    • 1970-01-01
    • 2021-07-14
    • 2022-11-25
    • 2015-06-10
    • 2015-12-13
    • 1970-01-01
    • 2023-02-01
    • 2015-06-16
    • 1970-01-01
    相关资源
    最近更新 更多