urllib.error.HTTPError:HTTP错误404:即使我可以转到链接,也找不到


import requests
from bs4 import BeautifulSoup
import wget   # Downloads files from url
page = requests.get("https://en.wikipedia.org/wiki/Gallery_of_sovereign_state_flags")
soup = BeautifulSoup(page.content, 'html.parser')
for flag in soup.find_all('a', attrs={'class': "image"}):
src = flag.contents[0]['src']
src = src.replace("thumb/", "")
src = "https:" + src
sep = '.svg'
fixed_src = src.split(sep, 1)[0] + ".svg"
print(fixed_src)
for country in data["Country"]:    # A column containing country names
if country in fixed_src:
wget.download(fixed_src, f'flags/{country}.svg')

它适用于生成的大多数url,但一旦它达到";澳大利亚";它返回urllib.error.HTTPError:HTTP错误404:未找到。但当我按下链接时,它会将我重定向到它,它就会被找到。

我试图放置一个if语句来忽略澳大利亚,但很少有其他URL返回相同的错误。

有什么想法吗?

我认为您的问题很可能与URL中的转义字符有关。浏览器知道如何解决这些问题;然而,wget库似乎不知道如何做到这一点,您必须自己清除转义字符。

在执行wget之前,请尝试将urllib.parse.unquote(fixed_src)添加到代码中。它解决了404的问题,至少对我来说是这样

看看区别:

取消报价前:

https://upload.wikimedia.org/wikipedia/commons/7/7a/Flag_of_Afghanistan_%282004%E2%80%932021%29.svg

取消报价后:

https://upload.wikimedia.org/wikipedia/commons/7/7a/Flag_of_Afghanistan_(2004–2021).svg

以下完整代码:

import urllib
import requests
from bs4 import BeautifulSoup
import wget   # Downloads files from url
page = requests.get("https://en.wikipedia.org/wiki/Gallery_of_sovereign_state_flags")
soup = BeautifulSoup(page.content, 'html.parser')
for flag in soup.find_all('a', attrs={'class': "image"}):
src = flag.contents[0]['src']
src = src.replace("thumb/", "")
src = "https:" + src
sep = '.svg'
fixed_src = src.split(sep, 1)[0] + ".svg"
print(fixed_src)
url_unquoted = urllib.parse.unquote(fixed_src)
print(url_unquoted)
for country in data["Country"]:    # A column containing country names
if country in url_unquoted:
wget.download(url_unquoted, f'flags/{country}.svg')

类似的问题,在";python-wget对url失败";来自谷歌

urllib文档在这里

相关内容

最新更新