此网站是否不适合使用beautifulsoup进行网页抓取?

2024-09-29 17:23:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用beautifulsoup在以下网站上获取每场比赛的赔率:

https://danskespil.dk/oddset/sports/category/990/counter-strike-go/matches

目标是最终生成某种文本文件,其中包含以下内容:

第1场,第1组,第1组获胜的几率,第2组,第2组获胜的几率

第二场,第1组,第1组获胜的几率,第2组,第2组获胜的几率

等等

我是新来的,所以事情已经在一个非常初级的水平上出了问题。我的方法是“遍历”html树,直到到达一个div标记,在那里我可以看到包含所有匹配项。在使用^{cl1}命中div标记之前,这种方法工作得很好$

This picture is for clarification.

下面是我的代码,m1和m2都不起作用。Python只响应none

from bs4 import BeautifulSoup as bs
import requests as res

#Load the webpage content
r = res.get('https://danskespil.dk/oddset/sports/category/990/counter-strike-go/matches').text

#Convert to a beautiful soup object
soup = bs(r,'lxml')

m1 = soup.find("div", attrs={"id": "wrapper"}).find("div", attrs={"class": "page-box"}).find("div", attrs={"class": "page-area"}).find("div", attrs={"id": "oddset-nashville"}).find("div", attrs={"class": "sgd-wrapper"})
m2 = soup.find("div", attrs={"class": "sgd-wrapper"})

如果我删除m1中的最后一个查找或重新定义m2

m1 = soup.find("div", attrs={"id": "wrapper"}).find("div", attrs={"class": "page-box"}).find("div", attrs={"class": "page-area"}).find("div", attrs={"id": "oddset-nashville"})
m2 = soup.find("div", attrs={"id": "oddset-nashville"})

然后我得到了回应

print(m1)
<div data-digital-portal-loader-url="https://assets.sb.danskespil.dk/front-end/digitalPortal.js?noCache=20201011001813" id="oddset-nashville"></div>

谁能给我解释一下为什么这个div^{cl2}$


Tags: httpsdividpagefindwrapperattrsclass
1条回答
网友
1楼 · 发布于 2024-09-29 17:23:18

问题出在r = res.get('https://danskespil.dk/oddset/sports/category/990/counter-strike-go/matches').text 的那一行

Python请求库只是将您的HTTP/HTTPS请求发送到服务器并获取原始html,它不能帮助您加载更多的资源,如图片和脚本,这意味着某些元素是在javascript脚本中操作的(例如,创建元素、设置类名并插入DOM树):

另一个示例是,如果通过请求GETmain.html,它不会加载main.js,并且divt1的类不会设置为sgd-wrapper

# main.html
<html>
   <body>
      <div id="t1"></div>
      <script src="main.js"></script>
   </body>
</html>

# in main.js
document.querySelector('#t1').classList.add('sgd-wrapper');

您需要做的是使用headless Chrome(比如google-chorme headless启动Chrome)并使用chromeapi钩住页面加载事件,然后转储整个内容

相关问题 更多 >

    热门问题