简单的GET可以在浏览器正常运行时返回404

时间:2018-09-08 21:19:49

标签: python http

我正在尝试抓取该网站: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。

2 个答案:

答案 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]>

将用户代理添加到您的请求中。