首页 > 解决方案 > 简单的 GET 在浏览器中一直返回 404 完美运行

问题描述

我正在尝试抓取这个网站:https ://www.transfermarkt.co.uk/

它在通过浏览器访问时运行良好,但是当我尝试在 python 中使用请求库时,它会为来自该域的每个 url 或子 url 保持返回 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 方法,但没有任何效果。我能够获得一些常用的网站,如维基百科和谷歌。

标签: pythonhttp

解决方案


该网站不喜欢来自 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)

推荐阅读