我正在抓取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.
有什么方法可以从此页面的下部获取数据吗?
答案 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