如何使用python lxml向下滚动时刮取提供更多信息的html页面

时间:2019-07-27 02:52:07

标签: python-3.x web-scraping lxml.html

我正在抓取https://www.basketball-reference.com/players/p/parsoch01.html中的文本。 但是我无法抓取页面“总计”表下方的内容。我想从“总计”和“高级”表中获取数字,但是代码什么也没有返回。 当用户向下滚动页面时,页面似乎加载了其他信息。

我运行了下面的代码,并成功地从玩家的个人资料部分和“每场比赛”表中获取数据。但是无法从“总计”表中获取价值。

from lxml import html
import urllib
playerURL=urllib.urlopen("https://www.basketball-reference.com/players/p/parsoch01.html")
# Use xpath to parse points per game.
ppg=playerPage.xpath('//tr[@id="per_game.2019"]//td[@data-stat="pts_per_g"]//text()')[0]# succeed to get the value
total=playerPage.xpath('//tr[@id="totals.2019"]//td[@data-stat="fga"]//text()')// I expect 182 to be returned but nothing is returned.

有什么方法可以从此页面的下部获取数据吗?

2 个答案:

答案 0 :(得分:0)

打开Web浏览器的控制台并测试xpath,以查看它是否找到了您要查找的元素。

$x("//tr[@id='totals.2019']//td[@data-stat='fga']//text()")

返回一个数组对象。

$x("//tr[@id='totals.2019']//td[@data-stat='fga']//text()")[0]

访问所需的值。

也:

# comments in python start with '#' not '//'

答案 1 :(得分:0)

这是因为您要从该站点中提取的内容在评论之内。 BeautifulSoup无法解析评论中的内容。要获得结果,您需要先取消注释,以便BeautifulSoup可以访问它。以下脚本完全符合我的意图:

import requests
from bs4 import BeautifulSoup

URL = "https://www.basketball-reference.com/players/p/parsoch01.html"

r = requests.get(URL).text
#kick out the comment signs from html elements so that BeautifulSoup can access them
comment = r.replace("-->", "").replace("<!--", "")
soup = BeautifulSoup(comment,"lxml")
total = soup.select_one("[id='totals.2019'] > [data-stat='fga']").text
print(total)

输出:

182