在Google上搜索“斋浦尔粉红豹”或直接访问prokabaddi网站后,我试图抓取结果。目标是刮擦单击任何匹配项时弹出的表格,以提供整个匹配项的总分值。
我曾尝试使用漂亮的汤和硒,但最终没有读任何div类值。在这方面的任何帮助都是非常可观的。
到目前为止,我尝试过的操作如下:[PS:我绝对不熟悉Python]:
尝试1:
from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.prokabaddi.com/stats/0-102-total-points-statistics')
soup = BeautifulSoup(driver.page_source,"lxml")
for item in soup.select('.sipk-lb-playerName'):
[elem.extract() for elem in soup("span")]
print(item.text)
driver.quit()
Attempt2:
import requests
from bs4 import BeautifulSoup
page = requests.get('https://www.prokabaddi.com/stats/0-102-total-points-statistics')
soup = BeautifulSoup(page.text, 'html.parser')
name_list = soup.find(class_='.sipk-lb-playerName')
答案 0 :(得分:0)
这样的网站,通过仅发送您当时需要的内容来简化用户的生活。 当您在网站上移动并单击某些内容时,剩余的数据将发送回给您。因此,它基本上就像您和服务器之间基于需求的交互一样。
在第一种方法中,即使能够在html源代码中看到该元素,也会得到一个空的 div 列表。原因是您单击了网页上的 Player 标签,然后该标签在那里列出。它在该时间点生成了新的html内容,因此您可以看到它。
在将html源发送到BeautifulSoup之前,您需要模拟该按钮的点击。因此,首先使用find_element_by_id()方法找到该按钮。然后,单击它。
element = driver.find_element_by_id('player_Btn')
element.click()
现在,您在驱动程序对象中有了更新的html源。只需将其发送给BeautifulSoup构造函数即可。
soup = BeautifulSoup(driver.page_source)
您不需要lxml解析器。现在,您可以查找特定的类并获取所有名称(我已经在此处完成)。
soup.findAll('div',attrs={'class':'sipk-lb-playerName'})
Voila!您可以存储返回的列表,并仅获取所需格式的名称。