标签: xpath

我们可以在BeautifulSoup中使用xpath吗?

我正在使用BeautifulSoup来抓取一个网址,我有以下代码

import urllib
import urllib2
from BeautifulSoup import BeautifulSoup

url =  "http://www.example.com/servlet/av/ResultTemplate=AVResult.html"
req = urllib2.Request(url)
response = urllib2.urlopen(req)
the_page = response.read()
soup = BeautifulSoup(the_page)
soup.findAll('td',attrs={'class':'empformbody'})
Run Code Online (Sandbox Code Playgroud)

现在在上面的代码中我们可以findAll用来获取与它们相关的标签和信息,但我想使用xpath.是否可以将xpath与BeautifulSoup一起使用?如果可能的话,有人可以给我一个示例代码,以便更有帮助吗?

python xpath urllib beautifulsoup

93
推荐指数
5
解决办法
11万
查看次数

用于.NET的XPath和XSLT 2.0?

.NET 3.5并不完全支持XPATH 2.0或XSLT 2.0,这太糟糕了.有谁知道这两个将在未来的.NET版本中被包含和完全支持吗?

.net xslt xpath

90
推荐指数
3
解决办法
4万
查看次数

如何使用xpath选择以下sibling/xml标记

我有一个HTML文件(来自Newegg),他们的HTML组织如下.其规格表中的所有数据均为" desc ",而每个部分的标题均为" 名称".'以下是来自Newegg页面的两个数据示例.

<tr>
    <td class="name">Brand</td>
    <td class="desc">Intel</td>
</tr>
<tr>
    <td class="name">Series</td>
    <td class="desc">Core i5</td>
</tr>
<tr>
    <td class="name">Cores</td>
    <td class="desc">4</td>
</tr>
<tr>
    <td class="name">Socket</td>
    <td class="desc">LGA 1156</td>
Run Code Online (Sandbox Code Playgroud)

<tr>
    <td class="name">Brand</td>
    <td class="desc">AMD</td>
</tr>
<tr>
    <td class="name">Series</td>
    <td class="desc">Phenom II X4</td>
</tr>
<tr>
    <td class="name">Cores</td>
    <td class="desc">4</td>
</tr>
<tr>
    <td class="name">Socket</td>
    <td class="desc">Socket AM3</td>
</tr>
Run Code Online (Sandbox Code Playgroud)

最后,我希望有一个CPU(已经设置好)的类,它包含Brand,Series,Cores和Socket类型,用于存储每个数据.这是我能想到的唯一方法:

if(parsedDocument.xpath(tr/td[@class="name"])=='Brand'):
    CPU.brand = parsedDocument.xpath(tr/td[@class="name"]/nextsibling?).text
Run Code Online (Sandbox Code Playgroud)

并为其余的值执行此操作.我如何完成nextsibling并且有更简单的方法吗?

xml xpath lxml

89
推荐指数
3
解决办法
14万
查看次数

如何将字符串连接到xsl:value-of select ="...?

<a>
    <xsl:attribute name="href"> 
     <xsl:value-of select="/*/properties/property[@name='report']/@value" />
    </xsl:attribute>
</a>    
Run Code Online (Sandbox Code Playgroud)

是否有任何方法可以将另一个字符串添加到

<xsl:value-of select="/*/properties/property[@name='report']/@value"  />
Run Code Online (Sandbox Code Playgroud)

除了报告属性值之外,我还需要将一些文本传递给href属性

xslt xpath

88
推荐指数
4
解决办法
25万
查看次数

XPath测试节点值是否为数字

如何使用XPath检查节点值是否为数字?

有任何想法吗?

xpath

87
推荐指数
5
解决办法
9万
查看次数

如何使用XPath选择任何深度的子元素?

假设我有这个(简化):

<form id="myform">
    <!-- some input fields -->
    <input type="submit" value="proceed"/>
</form>
Run Code Online (Sandbox Code Playgroud)

然后我可以通过XPath选择提交按钮//form[@id='myform']/input[@type='submit'].大.

但是,我的模板可能会更改,我希望在提交按钮所在的深度上保持灵活性.它可能放在一个表中,如下所示:

<form id="myform">
    <!-- some input fields -->
    <table><tr><td>
           <input type="submit" value="proceed"/>
    </td></tr></table>
</form>
Run Code Online (Sandbox Code Playgroud)

我知道我可以选择孙子的元素,但我不能选择任何深度的盛大盛大的孩子们.例如:

  • //form[@id='myform']/*/input[@type='submit'] 只选择大孩子,没有更深入的.
  • //form[@id='myform']/*/*/input[@type='submit'] 只选择曾祖母,没有更深或更少的深度.
  • //form[@id='myform']/**/input[@type='submit'] 无效.

那么,如何在不使用元素ID的情况下可靠地选择此提交按钮?

xpath

87
推荐指数
3
解决办法
10万
查看次数

如何通过链接文本与XPath找到链接URL?

我有一个结构良好的XHTML页面.我想要链接的文本时找到链接的目标URL.

<a href="http://stackoverflow.com">programming questions site</a>
<a href="http://cnn.com">news</a>
Run Code Online (Sandbox Code Playgroud)

我想要一个XPath表达式,如果给出programming questions site它将给出http://stackoverflow.com,如果我给它news,它将给出http://cnn.com.

xml xhtml xpath

86
推荐指数
4
解决办法
14万
查看次数

XPath:如何选择没有属性的节点?

使用XPath,如何选择没有属性的节点(其中属性count = 0)?

例如:

<nodes>
    <node attribute1="aaaa"></node>
    <node attribute1="bbbb"></node>
    <node></node> <- FIND THIS
</nodes>
Run Code Online (Sandbox Code Playgroud)

xpath

86
推荐指数
3
解决办法
3万
查看次数

使用xpath查找节点的位置

任何人都知道如何使用xpath获取节点的位置?

说我有以下xml:

<a>
    <b>zyx</b>
    <b>wvu</b>
    <b>tsr</b>
    <b>qpo</b>
</a>
Run Code Online (Sandbox Code Playgroud)

我可以使用以下xpath查询来选择第三个<b>节点(<b> tsr </ b>):

a/b[.='tsr']
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但我想返回该节点的序号位置,如:

a/b[.='tsr']/position()
Run Code Online (Sandbox Code Playgroud)

(但更多工作!)

它甚至可能吗?

编辑:忘了提到我正在使用.net 2所以它是xpath 1.0!


更新:结束使用James Sulak出色答案.对于那些感兴趣的人,我在C#中的实现:

int position = doc.SelectNodes("a/b[.='tsr']/preceding-sibling::b").Count + 1;

// Check the node actually exists
if (position > 1 || doc.SelectSingleNode("a/b[.='tsr']") != null)
{
    Console.WriteLine("Found at position = {0}", position);
}
Run Code Online (Sandbox Code Playgroud)

xpath

85
推荐指数
4
解决办法
11万
查看次数

不区分大小写的xpath contains()可能吗?

我正在运行我的DOM的所有文本节点,并检查nodeValue是否包含某个字符串.

/html/body//text()[contains(.,'test')]
Run Code Online (Sandbox Code Playgroud)

这是区分大小写的.但是,我也想抓住Test,TEST奥得TesT.这可能与XPath(在JavaScript中)?

javascript xml xslt xpath

85
推荐指数
6
解决办法
6万
查看次数

标签 统计

xpath ×10

xml ×3

xslt ×3

.net ×1

beautifulsoup ×1

javascript ×1

lxml ×1

python ×1

urllib ×1

xhtml ×1