从Google项目返回空列表的Python XPath
我试图从Google的Project天窗中提取平方英尺和日照时数的数据,但是XPath只返回空白字符串。 这是以Lowe’s作为地址的相关代码:从Google项目返回空列表的Python XPath,python,xpath,web-scraping,Python,Xpath,Web Scraping,我试图从Google的Project天窗中提取平方英尺和日照时数的数据,但是XPath只返回空白字符串。 这是以Lowe’s作为地址的相关代码: from lxml import htmlpageContent=requests.get('https://www.google.com/get/sunroof/building/34.00192560211979/-81.21430071233021/#?f=buy') tree = html.fromstring(pageCo
from lxml import
htmlpageContent=requests.get('https://www.google.com/get/sunroof/building/34.00192560211979/-81.21430071233021/#?f=buy')
tree = html.fromstring(pageContent.content)
print(tree.xpath("/html/body/div[1]/address-view/div[1]/div/div/section[1]/div[2]/md-card[1]/ul/li[1]/div[2]"))
print(tree.xpath("/html/body/div[1]/address-view/div[1]/div/div/section[1]/div[2]/md-card[1]/ul/li[2]/div[2]/text()"))
在这种情况下,我想要的东西大致如下:
[1581小时每年的可用阳光]
[134199平方英尺可用于太阳能电池板]
相反,我只得到:
[]
[]
我不熟悉像这样的网页抓取和xpath,所以我没能进行太多测试,但我知道不同的路径都会输出一个空白列表。正如@furas所指出的,对于内容依赖于Javascript的页面(现在大多数是这样),您需要使用类似于控制实际web浏览器的东西。一个简单的解决方案可能如下所示:
>>> from selenium import webdriver
>>> d = webdriver.Chrome()
>>> d.get('https://www.google.com/get/sunroof/building/34.00192560211979/-81.21430071233021/#?f=buy')
>>> [e.text for e in d.find_elements_by_css_selector('.panel-fact-text')]
['1,581 hours of usable sunlight per year', '134,199 sq feet available for solar panels']
>>> d.close()
总的来说,我认为xpath表达式的风格非常脆弱。不管怎样,你做了什么来调试这个?您通常如何调试这种web抓取?此页面使用JavaScript向页面添加项目-您无法使用
请求和lxml
或美化组
获得它,因为它们无法运行JavaScript。您可能需要Selenium
来控制可以运行JavaScript的web浏览器。顺便说一句:下次在浏览器中关闭JavaScript并重新加载页面以查看Python可以得到什么。