我试图从网站上下载不允许机器人的资料。我可以设法通过这种方式传递标题:
url = 'https://www.superdatascience.com/machine-learning/'
req = urllib.request.Request(url, headers = {'user-agent':'Mozilla/5.0'})
res = urllib.request.urlopen(req)
soup = bs(res,'lxml')
links = soup.findAll('a')
res.close()
hrefs = [link.attrs['href'] for link in links]
# Now am filtering in zips only
zips = list(filter(lambda x : 'zip' in x, hrefs))
我希望Kiril原谅我,说实话,我并不是说任何不道德的行为。只是想以编程方式制作它。
现在,当我拥有zip文件的所有链接时,我需要从中检索内容。 urllib.request.urlretrieve
显然禁止通过脚本下载。所以,我是通过URLOpener来做的:
opener = urllib.request.URLopener()
opener.version = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
for zip in zips:
file_name = zip.split('/')[-1]
opener.retrieve(zip, file_name)
以上回复:
HTTPError: HTTP Error 301: Moved Permanently
我尝试了没有循环,想到了一些愚蠢的东西,并用方法addheaders
制作了它:
opener = urllib.request.URLopener()
opener.addheaders = [('User-agent','Mozilla/5.0')]
opener.retrieve(zips[1], 'file.zip')
但它没有加载任何资源就返回了相同的响应。
我有两个问题: 1.我的代码有问题吗?如果是的话我做错了什么? 2.有另一种方法可以使它工作吗?
提前多多感谢!