我在使用请求库提取数据时遇到问题。
我想获取比赛的时间,球队的名称,比赛结果的赔率 nesine.com
示例:
Match time: 19.00
Team Name 1 : Boluspor
Team Name 2 : Menemen
Match Result (1) : 2.10
Match Result (X) : 2.65
Match Result (2) : 2.65
Match Result (Lower) : 1.55
Match Result (Upper) : 1.75
为此我做了很多尝试,但是没有一个人是积极的。 这是我尝试过的代码之一
r = requests.get("https://www.nesine.com/iddaa?et=1&lc=584%7C1980&le=1&ocg=MS-2%2C5>=Pop%C3%BCler")
source = BeautifulSoup(r.content,"lxml")
times = source.find_all("div",attrs={"class":"time"})
names = source.find_all("div",attrs={"class":"name"})
return times,names
答案 0 :(得分:0)
首先值得理解的是为什么为什么不能使用requests
来检索您的数据,但也可能如何去做。
requests
工作流程非常简单-.get()
函数将HTTP请求发送到服务器,以请求有关页面的相关资源。然后,服务器会回复构成页面的相关HTML,CSS和Javascript。与许多服务器一样,该服务器不会完整显示页面的全部内容,而是使用服务器响应Java的Javascript 进一步将更多信息加载到页面中。当您加载网站并在试图向其请求信息的框架内看到“正在加载”符号时,这在视觉上是显而易见的,但是当您在网络中进行快速分析时,这一点变得更加明显。 >检查元素的标签。
大约1,500ms至2500ms,我的浏览器向API端点发送了一个新请求,该请求似乎拉出了您要查找的相关信息(我只是在进一步挖掘之后才知道这一点-并非有些疯狂的直觉)。将其与http://example.com进行比较,您可以看到一个简单的HTML&CSS网站如何仅使用初始GET
数据进行答复:
要提取所需信息,您必须查看网络标签,并查看如何您的浏览器正在从服务器提取数据。对单词Boluspor
进行快速“查找”,我们得到以下结果:
现在我们知道API请求在哪里,然后我们可以使用requests
查询该API请求以获取相关信息。我建议首先单击实际结果来自的 的网址,然后选择“复制为提取”,您将获得以下内容:
fetch("https://bulten.nesine.com/api/bulten/getprebultenfull", {
"headers": {
"accept": "application/json, text/javascript, */*; q=0.01",
"accept-language": "en-US,en;q=0.9",
"authorization": "Basic RDQ3MDc4RDMtNjcwQi00OUJBLTgxNUYtM0IyMjI2MTM1MTZCOkI4MzJCQjZGLTQwMjgtNDIwNS05NjFELTg1N0QxRTZEOTk0OA==",
"cache-control": "no-cache",
"content-type": "application/json; charset=utf-8",
"pragma": "no-cache",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-site"
},
"referrer": "https://www.nesine.com/",
"referrerPolicy": "strict-origin-when-cross-origin",
"body": null,
"method": "GET",
"mode": "cors",
"credentials": "include"
});
仅上述内容似乎并不表示请求中有什么特别的事情(例如标头,参数等),因此仅访问端点应该可以工作-就是这种情况:
https://bulten.nesine.com/api/bulten/getprebultenfull
然后您可以使用requests
抓取该页面,通过json
模块加载该页面,然后开始整理数据。