如何使用 Python 从 javascript 网站抓取数据?

问题描述 投票:0回答:1

我有几个月的 Python 编程经验,并且想开展一个更大的学术项目,收集和分析足球运动员的伤病历史。

数据来源是根据媒体报道追踪此类数据的网站。以下是 Kylian Mbappe 的示例:https://www.transfermarkt.com/kylian-mbappe/verletzungen/spieler/342229

使用Python代码,我想自动检索该网站上的表格。在互联网上,有很多关于如何使用“requests”和“beautifulsoup”库从AJAX请求获取数据的教程。但是,在这种情况下,我无法继续,因为我无法使用开发人员控制台找到适当的 AJAX 请求。

任何人都可以给我一些关于如何正确启动这个项目的提示吗?我需要更深入地研究网站的 JavaScript 吗?

亲切的问候

我在 Chrome 浏览器的开发者控制台中检查了 Fetch/XHR 请求,但没有找到合适的请求。

我发现了一个名为ajax/的文档请求,但我不知道它是否包含有用的信息。

以下代码返回

import requests
url = "https://www.transfermarkt.de/kylian-mbappe/verletzungen/spieler/342229/"
r = requests.get(url)
print(r)
python web-scraping
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

© www.soinside.com 2019 - 2024. All rights reserved.