Python 循环遍历 csv 文件中的 url 返回 \ufeffhttps://

Posted

技术标签:

【中文标题】Python 循环遍历 csv 文件中的 url 返回 \\ufeffhttps://【英文标题】:Python Looping through urls in csv file returns \ufeffhttps://Python 循环遍历 csv 文件中的 url 返回 \ufeffhttps:// 【发布时间】:2020-11-06 00:34:00 【问题描述】:

我是 python 新手,我正在尝试遍历 csv 文件中的 url 列表并使用 BeautifulSoup 抓取网站 title,然后我想将其保存到文件 Headlines.csv .但我无法抓取网页title。如果我使用带有单个 url 的变量,如下所示:

url = 'https://www.space.com/japan-hayabusa2-asteroid-samples-landing-date.html'

resp = req.get(url)
soup = BeautifulSoup(resp.text, 'lxml')

print(soup.title.text)

它工作得很好,我得到了标题Japanese capsule carrying pieces of asteroid Ryugu will land on Earth Dec. 6 | Space 但是当我使用循环时,

import csv
with open('urls_file2.csv', newline='', encoding='utf-8') as f:
    reader = csv.reader(f)
    for url in reader:
        print(url)
        resp = req.get(url)
        soup = BeautifulSoup(resp.text, 'lxml')

        print(soup.title.text)

我得到以下信息 ['\ufeffhttps://www.foxnews.com/us/this-day-in-history-july-16']

还有一条错误消息

InvalidSchema: No connection adapters were found for "['\\ufeffhttps://www.foxnews.com/us/this-day-in-history-july-16']"

我不确定我做错了什么。

【问题讨论】:

【参考方案1】:

正如前面的答案已经提到的“\ufeff”,您需要更改编码。

第二个问题是,当您读取 CSV 文件时,您会得到一个列表,其中包含每一行的所有列。这里的关键字是列表。您正在向请求传递列表而不是字符串。

根据您给出的示例,我假设您的网址位于 csv 的第一列。 Python 列表以 0 而不是 1 的索引开始。因此,要提取 url,您需要提取 0 的索引,它指的是第一列。

import csv

with open('urls_file2.csv', newline='', encoding='utf-8-sig') as f:
    reader = csv.reader(f)
    for url in reader:
        print(url[0])

要了解更多关于列表的信息,您可以参考here。 您可以在 CSV 文件中添加更多列并进行试验以查看结果的显示方式。 如果您想在阅读每一行时参考列名,可以参考here。

【讨论】:

【参考方案2】:

您从文件中解析的 URL 上有一个字节顺序标记 \\ufeff。 看起来您的文件是签名文件,并且具有类似 utf-8-sig 的编码。

您需要阅读带有encoding='utf-8-sig'的文件

阅读更多here。

【讨论】:

谢谢我昨天遇到了你链接的问题,我不确定要使用哪个编解码器。我使用了您的编码,以及 Raymond C. 建议的解决方案,它有效!

以上是关于Python 循环遍历 csv 文件中的 url 返回 \ufeffhttps://的主要内容,如果未能解决你的问题,请参考以下文章

for循环中的2个csv文件,输出一个csv文件python

遍历 for 循环并将检索到的数据保存在每个循环的唯一 csv 文件中 | Python

遍历 CSV 的每一行并使用 Python-Pandas 写入文件夹中的单个 JSON 文件

在 Python CSV Writer 循环中写入标题一次

在 spark 中循环遍历 csv 文件的最佳方法

gh读取csv文件