如何使用python

时间:2020-10-26 13:02:39

标签: python python-requests

我在使用请求库提取数据时遇到问题。

我想获取比赛的时间,球队的名称,比赛结果的赔率 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&gt=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

1 个答案:

答案 0 :(得分:0)

首先值得理解的是为什么为什么不能使用requests来检索您的数据,但也可能如何去做。

requests工作流程非常简单-.get()函数将HTTP请求发送到服务器,以请求有关页面的相关资源。然后,服务器会回复构成页面的相关HTML,CSS和Javascript。与许多服务器一样,该服务器不会完整显示页面的全部内容,而是使用服务器响应Java的Javascript 进一步将更多信息加载到页面中。当您加载网站并在试图向其请求信息的框架内看到“正在加载”符号时,这在视觉上是显而易见的,但是当您在网络中进行快速分析时,这一点变得更加明显。 >检查元素的标签。

enter image description here

大约1,500ms至2500ms,我的浏览器向API端点发送了一个新请求,该请求似乎拉出了您要查找的相关信息(我只是在进一步挖掘之后才知道这一点-并非有些疯狂的直觉)。将其与http://example.com进行比较,您可以看到一个简单的HTML&CSS网站如何仅使用初始GET数据进行答复:

enter image description here

要提取所需信息,您必须查看网络标签,并查看如何您的浏览器正在从服务器提取数据。对单词Boluspor进行快速“查找”,我们得到以下结果:

enter image description here

现在我们知道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模块加载该页面,然后开始整理数据。