栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么此xpath在python中使用lxml失败?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么此xpath在python中使用lxml失败?

1.浏览器经常更改HTML

浏览器经常更改为其提供的HTML,以使其“有效”。例如,如果您为浏览器提供服务,则此无效的HTML:

<table>  <p>bad paragraph</p>  <tr><td>Note that cells and rows can be unclosed (and valid) in HTML</table>

要呈现它,浏览器会很有帮助,并尝试使其成为有效的HTML,并将其转换为:

<p>bad paragraph</p><table>  <tbody>    <tr>      <td>Note that cells and rows can be unclosed (and valid) in HTML</td>    </tr>  </tbody></table>

由于

<p>
aragraph不能位于
<table>
s之内,因此更改了上述内容,
<tbody>
因此建议这样做。应用于源的更改可能因浏览器而异。有些会将无效元素放在表格之前,有些放在表格之后,有些放在内部单元格中,等等。

2. Xpath不是固定的,它们可以灵活地指向元素。

使用此“固定” HTML:

<p>bad paragraph</p><table>  <tbody>    <tr>      <td>Note that cells and rows can be unclosed (and valid) in HTML</td>    </tr>  </tbody></table>

如果我们尝试定位

<td>
单元格的文本,则以下所有内容将为您提供大致正确的信息:

//td//tr/td//tbody/tr/td/table/tbody/tr/td/table//*/text()

而这样的例子不胜枚举…

但是,一般而言,浏览器会为您提供最精确(且最不灵活)的XPath,它列出了DOM中的每个元素。在这种情况下:

/table[0]/tbody[0]/tr[0]/td[0]/text()

3.结论:给浏览器指定的Xpath通常无济于事

这就是为什么开发人员工具生成的XPath在尝试使用原始HTML时会经常为您提供错误的Xpath的原因。

该解决方案始终引用原始HTML,并使用灵活但精确的XPath。

检查持有价格的实际HTML:

<table border="0" cellspacing="0" cellpadding="0">    <tr>        <td> <font >     <div >         <b>  <font >Price:</font>  <span itemprop="price">$149.95</span>         </b>     </div> </font> <br/> <input type="image" src="/v/vspfiles/templates/MAKO/images/buttons/btn_updateprice.gif" name="btnupdateprice" alt="Update Price" border="0"/>        </td>    </tr></table>

如果您想要价格,实际上只有一个地方可以看!

//span[@itemprop="price"]/text()

这将返回:

$149.95


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/624336.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号