Reg*_*ith 5 javascript lxml python-3.x
我之前已经让 Xpath 与其他东西一起工作,在 Chrome 浏览器中我可以在控制台中使用 $x('//*[@id="profile"]/div[2]/div[2]/div 找到我的 xpath [1]/div[2]/div[2]/div[1]/span[2])位于https://pubgtracker.com/profile/pc/Fuzzyllama/duo?region=na。
当我尝试在代码中获取此元素时,它返回一个空数组,有人知道为什么吗?
@client.command(pass_context=True)
async def checkChrisPubg(ctx):
page = requests.get('https://pubgtracker.com/profile/pc/Fuzzyllama/duo?region=na')
tree = html.fromstring(page.content)
duoRank = tree.xpath('//*[@id="profile"]/div[2]/div[2]/div[1]/div[2]')
print(duoRank)
Run Code Online (Sandbox Code Playgroud)
print(duoRank) 给我 []
因此,我尝试使用 PyQt4 来做到这一点,但在实践中没有取得真正的成功,一个更简单但更具侵入性的解决方案是使用 Selenium,一个用于加载网页的网络驱动程序。
我确信对此有多种解决方案,但在找到解决方案之前,我什至知道出了什么问题,但我度过了一段痛苦的时光。
使用lxml时,您应该确保您尝试获取的数据不是由 javascript 生成的。为此,您可以打开 Chrome 开发人员工具,单击菜单(3 个垂直点),转到设置,转到底部,禁用 Javascript,然后重新加载页面。
如果没有任何内容,则该页面将使用 Javascript 生成内容。
下面是一个简单的解决方案,这将等待页面渲染,然后让您使用 lxml 解析树。
此解决方案将要求您使用这些导入(您必须安装 selenium):
from selenium import webdriver
Run Code Online (Sandbox Code Playgroud)
现在,您可以加载页面并开始抓取:
#Load in your browser(I use chrome)
browser = webdriver.Chrome()
#Choose url you want to scrape
url = 'https://pubgtracker.com/profile/pc/Fuzzyllama/duo?region=na'
#get the url with Selenium
browser.get(url)
#get the innerhtml from the rendered page
innerHTML = browser.execute_script("return document.body.innerHTML")
#Now use lxml to parse the page
tree = html.fromstring(innerHTML)
#Get your element with xpath
duoRank = tree.xpath('//*[@id="profile"]/div[2]/div[2]/div[1]/div[2]/div[2]/div[1]/span[2]/text()')
#close the browser
browser.quit()
Run Code Online (Sandbox Code Playgroud)
我最初的解决方案本来很好,但只是不起作用,因为其中大部分已被弃用。