Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Google项目返回空列表的Python XPath_Python_Xpath_Web Scraping - Fatal编程技术网

从Google项目返回空列表的Python XPath

从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

我试图从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(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可以得到什么。