python - 简单的 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 方法,但没有任何效果。我能够获得一些常用的网站,如维基百科和谷歌。
解决方案
该网站不喜欢来自 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)
推荐阅读
- javascript - 如何将变量从引导模式传递给 PHP?
- sql - 根据 created_at 对唯一值 Snowflake 进行排名
- rxjs - 如何在switchMap内部使用管道
- jax-rs - Guice Resteasy JaxRS 集成
- android - 适用于 android 和 ios 的 Flutter 开发信息亭应用(?)
- python-pptx - 有没有办法在填充 python-pptx 中的单元格后找到表格的高度?
- haskell - 如何在 Haskell 中的空嵌套列表上进行模式匹配?
- cron - cron/ fcron bootrun 选项:如何使用?
- rest - 在 Flutter 中使用 Rest API 获取用户数据
- hibernate - Spring JPA:如何查看日志中发出的提交?