繁体   English   中英

Python requests.get 不从网站返回所有元素

[英]Python requests.get not returning all elements from website

我试图从这个网站获取球员的固定装置,但是当我使用 requests.get 时,它没有返回。

r = requests.get("http://www.fplstatistics.co.uk/")
soup = BeautifulSoup(compiled.sub("",r.text),'lxml')
allFixtures = soup.find("span", {"class": "dtr-data"})
return allFixtures

您需要的信息未包含在从您的 URL 返回的 HTML 中。 浏览器构造另一个调用以通过 javascript(请求不支持)获取此信息。

通过使用浏览器的开发人员工具进行观察,您可以看到为获取以 JSON 形式返回的数据而发出的请求。

不幸的是,它用于获取此信息的 URL 需要一些信息,这些信息隐藏在 HTML 的脚本部分之一中。 所需的键和值均使用 HEX 格式(如果您搜索 HTML,您会找到它)。

正则表达式可用于提取进行调用所需的键和值。 有了这个,可以进行第二次请求调用以获取 JSON(与浏览器相同的方式)。 我建议您将其打印出来,以便您可以查看返回的所有信息的结构。

以下应该工作:

import requests
import re

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36"}
s = requests.Session()
req_main = s.get("http://www.fplstatistics.co.uk/", headers=headers)

k = re.search(r'"\\x6E\\x61\\x6D\\x65":"(.*?)"', req_main.text).group(1)
v = re.search(r'"\\x76\\x61\\x6C\\x75\\x65":(.*?)}', req_main.text).group(1)

url_json = f"http://www.fplstatistics.co.uk/Home/AjaxPricesIHandler?{k}={v}&pyseltype=0"
req_json = s.get(url_json, headers=headers)
fixtures = [fixture[-1] for fixture in req_json.json()["aaData"]]

for fixture in fixtures:
    print(fixture)

给你输出开始:

Aston Villa(H) Leicester(A) Watford(H) Liverpool(A) 
Aston Villa(H) Leicester(A) Watford(H) Liverpool(A) 
Aston Villa(H) Leicester(A) Watford(H) Liverpool(A)

此页面使用 JavaScript 动态加载要从此类页面中提取数据,您可以点击此链接: Python Scrape 网站加载 JS

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM