如何使用Python从javascript网站抓取数据?
我有几个月的Python编程经验,想做一个比较大的项目,主要是收集和分析足球运动员的受伤历史,作为学术研究。
数据来源是一个网站,这个网站根据媒体报道来追踪这些数据。比如说,关于基利安·姆巴佩的信息,可以在这里找到:https://www.transfermarkt.com/kylian-mbappe/verletzungen/spieler/342229
我想用Python代码来自动获取这个网站上的表格数据。网上有很多教程教你怎么用“requests”和“beautifulsoup”这两个库来获取AJAX请求的数据。但是在这个情况下,我遇到了问题,因为我在开发者控制台找不到合适的AJAX请求。
有没有人能给我一些建议,告诉我该如何开始这个项目?我需要更深入地了解网站的JavaScript吗?
谢谢!
我在Chrome浏览器的开发者控制台查看了Fetch/XHR请求,但没有找到合适的请求。
我找到一个叫ajax/的文档请求,但我不知道它是否包含有用的信息。
下面的代码返回了<Response [404]>
import requests
url = "https://www.transfermarkt.de/kylian-mbappe/verletzungen/spieler/342229/"
r = requests.get(url)
print(r)
1 个回答
0
你需要传递必要的头信息,以避免请求被阻挡。可以从浏览器的网络选项卡中复制请求为cURL格式。
下面的代码运行得很好,并且返回了正确的响应。
import requests
headers = {
'authority': 'www.transfermarkt.de',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-GB,en;q=0.9',
'cache-control': 'no-cache',
'pragma': 'no-cache',
'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',
}
response = requests.get('https://www.transfermarkt.de/kylian-mbappe/verletzungen/spieler/342229/', headers=headers)
print(response)
后台还有另一个请求在进行分页处理。
第二页的链接是:https://www.transfermarkt.de/kylian-mbappe/verletzungen/spieler/342229/page/2?ajax=yw1