无法使用lxml和xpath从html检索文本

无法使用lxml和xpath从html检索文本,html,python-2.7,xpath,web-scraping,lxml,Html,Python 2.7,Xpath,Web Scraping,Lxml,我正在做一个二手房定价项目,所以我需要从中国最大的二手房交易平台之一获取信息。这是我的问题,页面上的信息和使用Chrome“inspect”功能的相应元素如下: 我的代码: >>>from lxml import etree >>>import requests >>>url = 'http://bj.lianjia.com/chengjiao/101101498110.html' >>>r = requests.get(

我正在做一个二手房定价项目,所以我需要从中国最大的二手房交易平台之一获取信息。这是我的问题,页面上的信息和使用Chrome“inspect”功能的相应元素如下:

我的代码:

>>>from lxml import etree
>>>import requests
>>>url = 'http://bj.lianjia.com/chengjiao/101101498110.html'
>>>r = requests.get(url)
>>>xiaoqu_avg_price = tree.xpath('//[@id="resblockCardContainer"]/div/div/div[2]/div/div[1]/span/text()')
>>>xiaoqu_avg_price
[]
返回的空列表是不可取的(理想情况下应该是73648)。此外,我查看了它的HTML源代码,其中显示:


那我该怎么做才能得到我想要的?那么,resblockCard是什么意思?谢谢。

XPath查询没有按预期工作,因为您是在服务器提供服务时针对页面的源代码运行它,而不是在呈现的浏览器页面上运行它

一种解决方案是与浏览器驱动程序或其他浏览器驱动程序结合使用,该驱动程序将在该页面上运行JavaScript并为您呈现

from selenium import webdriver
from lxml import html

driver = webdriver.PhantomJS(executable_path="<path to>/phantomjs.exe")
driver.get('http://bj.lianjia.com/chengjiao/101101498110.html')
source = driver.page_source
driver.close()  # or quit() if there are no more pages to scrape

tree = html.fromstring(source)
price = tree.xpath('//div[@id="resblockCardContainer"]/div/div/div[2]/div/div[1]/span/text()')[0].strip()
从selenium导入webdriver
从lxml导入html
driver=webdriver.PhantomJS(可执行文件路径=“/PhantomJS.exe”)
司机,上车http://bj.lianjia.com/chengjiao/101101498110.html')
source=driver.page\u source
driver.close()#或quit(),如果没有更多的页面可刮
tree=html.fromstring(源)
price=tree.xpath('//div[@id=“resblockCardContainer”]/div/div/div[2]/div/div/div[1]/span/text()')[0].strip()

以上返回
73648元/㎡

与其他许多网站一样,该网站使用ajax填充内容。如果您发出类似的请求,您可以获得json格式的所需值

import requests

url = 'http://bj.lianjia.com/chengjiao/resblock?hid=101101498110&rid=1111027378082'
# Get json response
response = requests.get(url).json()
print(response['data']['resblock']['unitPrice'])
# 73648

请注意请求url中的两组数字。第一组来自原始页面url,第二组您可以在原始页面源中的
script
标记下找到:
resblockId:'1111027378082'

您是否尝试过使用
.xiaoqu\u main\u info/text()