Web Scrape谷歌搜索弹出结果或www.prokabaddi.com

时间:2018-12-22 05:22:15

标签: python-3.x web-scraping

在Google上搜索“斋浦尔粉红豹”或直接访问prokabaddi网站后,我试图抓取结果。目标是刮擦单击任何匹配项时弹出的表格,以提供整个匹配项的总分值。

我曾尝试使用漂亮的汤和硒,但最终没有读任何div类值。在这方面的任何帮助都是非常可观的。

Area to scrape is the pop-up here

到目前为止,我尝试过的操作如下:[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')

enter image description here

1 个答案:

答案 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!您可以存储返回的列表,并仅获取所需格式的名称。