我正在尝试抓取该网站:https://www.transfermarkt.co.uk/
当通过浏览器访问时,它可以完美工作,但是当我尝试在python中使用请求库时,它将为该域中的每个URL或子URL保留returnin 404。我不知道发生了什么,也不知道要搜索哪些术语来解决这个问题。
我目前使用anaconda 3 python。下面是一些上下文的脚本。
import requests
import sys
print('Requests version')
print(requests.__version__)
print('Python version')
print(sys.version)
print()
print('Requesting...')
result = requests.get('https://www.transfermarkt.co.uk/')
print(result)
此块的输出为
Requests version
2.18.4
Python version
3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56)
[GCC 7.2.0]
Requesting...
<Response [404]>
我从他们的网站尝试了其他来源和地址,但没有任何效果。我也尝试了其他https方法,但没有任何效果。我能够获得一些常见的网站,例如Wikipedia和Google。
答案 0 :(得分:3)
该网站不喜欢来自Python代码的HTTP(S)请求。默认情况下,requests
设置以下请求标头:
{
'User-Agent': 'python-requests/2.19.1',
'Accept-Encoding': 'gzip, deflate',
'Accept': '*/*',
'Connection': 'keep-alive'
}
如果您设置了另一个不太明显的User-Agent
,它应该可以正常工作。例如:
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'
}
result = requests.get('https://www.transfermarkt.co.uk', headers=headers)
答案 1 :(得分:1)
In [1]: import requests
In [2]: requests.get('https://www.transfermarkt.co.uk/', headers={'User-Agent':
'test-app/1.0'})
Out[2]: <Response [200]>
将用户代理添加到您的请求中。