【发布时间】:2021-08-17 01:33:40
【问题描述】:
import urllib.request as req
import re
import bs4
import csv
url="https://en.wikipedia.org/wiki/South_China_Morning_Post"
request=req.Request(url,headers={
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36)"})
with req.urlopen(request) as response:
data=response.read().decode("utf-8")
root=bs4.BeautifulSoup(data,'html.parser')
links_list=root.find_all('a')
print(type(links_list))
for link in links_list:
if 'href' in link.attrs:
text=str(link.attrs['href'])
with open('link.csv','a',newline='',encoding='utf_8_sig') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(text)
#print(str(link.attrs['href'])) #for debug
# matchno=root.find_all(class_="nav-link",href=True)
# print(matchno)
当我运行上面的代码时,我在 Excel 文件中得到了以下输出:
/,w,i,k,i,/,S,C,M,P,_,(,d,i,s,a,m,b,i,g,u,a,t,i,o,n,)
/,w,i,k,i,/,F,i,l,e,:,S,C,M,P,_,l,o,g,o,.,s,v,g
我可以知道如何将所有这些链接改正吗?
/wiki/SCMP_(disambiguation)
/wiki/File:SCMP_logo.svg
【问题讨论】:
-
请提供预期的minimal, reproducible example (MRE)。我们应该能够复制和粘贴您的代码的连续块,执行该文件,并重现您的问题以及跟踪问题点的输出。这让我们可以根据您的测试数据和所需的输出来测试我们的建议。您在这篇文章中包含了很多的开销。您的问题是您永远不应该将原始 URL 字符串分解为单个字符。跟踪您的代码,了解您在哪里执行此操作,然后...停止这样做。
-
看来这是一个完整的MCVE。我可以很容易地重现这个问题。
-
嗨@Prune,这个帖子似乎是一个MRE。尽管
print(str(link.attrs['href']))显示正确的输出,但问题/,w,i,k,i,/,F,i,l,e,:,S,C,M,P,_,l,o,g,o,.,s,v,g在Excel 文件link.csv中重现。您应该删除您的反对票 -
@BlackRaven:感谢您对我的回访。我目前无法检查自己,但我相信你的证据。我已经删除了我的关闭投票。在进行编辑之前,我无法删除反对票,并且我犯了审查未完成的编辑的错误,而不是进行微不足道的改进以强制它通过。
标签: python api csv beautifulsoup python-requests