我正在使用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一起使用?如果可能的话,有人可以给我一个示例代码,以便更有帮助吗?
.NET 3.5并不完全支持XPATH 2.0或XSLT 2.0,这太糟糕了.有谁知道这两个将在未来的.NET版本中被包含和完全支持吗?
我有一个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并且有更简单的方法吗?
<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属性
假设我有这个(简化):
<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的情况下可靠地选择此提交按钮?
我有一个结构良好的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.
使用XPath,如何选择没有属性的节点(其中属性count = 0)?
例如:
<nodes>
<node attribute1="aaaa"></node>
<node attribute1="bbbb"></node>
<node></node> <- FIND THIS
</nodes>
Run Code Online (Sandbox Code Playgroud) 任何人都知道如何使用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) 我正在运行我的DOM的所有文本节点,并检查nodeValue是否包含某个字符串.
/html/body//text()[contains(.,'test')]
Run Code Online (Sandbox Code Playgroud)
这是区分大小写的.但是,我也想抓住Test,TEST奥得TesT.这可能与XPath(在JavaScript中)?