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