使用python和xpath进行html抓取

使用python和xpath进行html抓取,python,xpath,web-scraping,Python,Xpath,Web Scraping,我试图理解使用lxml提取文本的过程 尝试简单的python程序 from lxml import html import requests page = requests.get('http://www.foo bar') tree = html.fromstring(page.content) name = tree.xpath('//*[@id="yui_3_17_2_1_1487276887950_2408"]/div[@class="locu-menu-item-name"]/text

我试图理解使用lxml提取文本的过程 尝试简单的python程序

from lxml import html
import requests
page = requests.get('http://www.foo bar')
tree = html.fromstring(page.content)
name = tree.xpath('//*[@id="yui_3_17_2_1_1487276887950_2408"]/div[@class="locu-menu-item-name"]/text')
print(name)
结果为[]

对于嵌套标记的值,xpath为: //*[@id=“yui_3_17_2_1_1487276887950_103789”]/div[1]/div[1]

值为
意大利柠檬索贝托
它是这样嵌套的

<div class="menu-item-inner">                      
    <div class="locu-menu-item-name">Italian Lemon Sorbetto</div>
    <div class="locu-menu-item-description">Dairy-free</div>
    <div class="option-wrapper"></div>
    <div class="locu-menu-item-price"></div>
</div>

意大利柠檬索贝托
不含乳制品

任何帮助都会很好。

您的xpath中有一个错误。要获取文本,应在最后使用
/text()
,而不是
/text
。因此,您的xpath应该如下所示:

name = tree.xpath('//*[@id="yui_3_17_2_1_1487276887950_2408"]/div[@class="locu-menu-item-name"]/text()')
当您使用
/text
时,表示您正在查找嵌套的标记文本

<div class="locu-menu-item-name"><text>Italian Lemon Sorbetto</text></div>
意大利柠檬索贝托

如果您只是使用css选择器,您可能会发现查找引用和帮助会更容易。我知道xpath中的错误在哪里,但我在复制此元素上的xpath时将其与inspector显示的xpath进行了更改,即://*[@id=“蝗虫媒体容器”]/div[1]/div/div/div[1]/div[2]/div[1]/div[1],但是,使用my corrected/text()或未更改的xpath仍然会导致空结果。“我真的不知道从哪里得到这个。”ChuckLaPress你能提供真实的url吗?当我使用您添加的html运行xpath“tree.xpath('//div[@class=“蝗虫菜单项名称”]/text())”时,我得到text@ChuckLaPress所以这是页面加载的问题。当您使用请求进行呼叫时,响应中没有您的元素。可能在加载页面JS后添加元素。您可以使用类似“Selenium”的东西来获取此数据。谢谢,我知道,尽管我的经验很少,感谢您澄清问题在于,当元素尝试拉取它时,它没有加载。另外一个问题是,我已经编写了一些代码,结果是:使用selenium,您是否可以通过查看我编写的内容来帮助我获得答案