当前位置: 首页 > 知识库问答 >
问题:

我们可以使用XPath与BeautifulSoup吗?

卢鸿博
2023-03-14

我正在使用BeautifulSoup刮取一个URL,并使用以下代码查找td标记,其类为'empformbody':

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'})

现在,在上面的代码中,我们可以使用findall获取标记和与它们相关的信息,但我想使用XPath。是否可以将XPath与BeautifulSoup一起使用?如果可能,请给我提供示例代码。

共有1个答案

郦昆
2023-03-14

不,BeautifulSoup本身不支持XPath表达式。

另一个库lxml支持XPath1.0。它有一个BeautifulSoup兼容模式,它将尝试像Soup那样解析破碎的HTML。然而,缺省的lxml HTML解析器在解析坏掉的HTML方面做得同样好,而且我相信它更快。

一旦将文档解析为lxml树,就可以使用.xpath()方法搜索元素。

try:
    # Python 2
    from urllib2 import urlopen
except ImportError:
    from urllib.request import urlopen
from lxml import etree

url =  "http://www.example.com/servlet/av/ResultTemplate=AVResult.html"
response = urlopen(url)
htmlparser = etree.HTMLParser()
tree = etree.parse(response, htmlparser)
tree.xpath(xpathselector)
import lxml.html
import requests

url =  "http://www.example.com/servlet/av/ResultTemplate=AVResult.html"
response = requests.get(url, stream=True)
response.raw.decode_content = True
tree = lxml.html.parse(response.raw)
from lxml.cssselect import CSSSelector

td_empformbody = CSSSelector('td.empformbody')
for elem in td_empformbody(tree):
    # Do something with these table cells.
for cell in soup.select('table#foobar td.empformbody'):
    # Do something with these table cells.
 类似资料:
  • 问题内容: 我正在使用BeautifulSoup抓取网址,并且我有以下代码 现在在上面的代码中,我们可以用来获取标签和与其相关的信息,但是我想使用xpath。是否可以将xpath与BeautifulSoup一起使用?如果可能的话,任何人都可以给我提供示例代码,以使其更有帮助吗? 问题答案: 不,BeautifulSoup本身不支持XPath表达式。 另一种库,LXML, 不 支持的XPath 1.

  • 问题内容: 我看到了其他有关xpath 2.0的问题,它显然简化了字符串表达式。我正在使用Firefox 3.5.5和Selenium 1.0.1。 如何检查我的Firefox和Selenium版本是否支持它? Selenium是否遵循Firefox的内置Xpath实现? 在那种情况下,如果我开始将另一个(也许是较旧的)浏览器与selenium一起使用,是否会因为期望xpath 2.0而遇到问题?

  • 问题内容: 是否可以使用BeautifulSoup从HTML中删除脚本标签及其所有内容,还是必须使用正则表达式或其他内容? 问题答案:

  • 本文向大家介绍我们可以在JSP中使用XPath表达式的switch语句吗?,包括了我们可以在JSP中使用XPath表达式的switch语句吗?的使用技巧和注意事项,需要的朋友参考一下 在<X:选择>标签的运作方式类似于Java的switch语句。有了这个,您可以在多种选择之间进行选择。如果switch语句具有case语句,则<x:choose>标记具有<x:when>标记。以类似的方式,switc

  • 本文向大家介绍我们可以在JSP中测试XPath表达式吗?,包括了我们可以在JSP中测试XPath表达式吗?的使用技巧和注意事项,需要的朋友参考一下 <X:如果>标签计算一个测试XPath表达式,并且如果它是真实的,它处理它的身体。如果测试条件为假,则忽略主体。 属性 <X:如果>标签具有以下属性- 属性 描述 需要 默认 选择 要评估的XPath表达式 是 没有 变种 用于存储条件结果的变量名称

  • 问题内容: 我是JPA的新手。 根据我的理解,JPA是规范,Hibernate实现JPA并提供附加功能以及JPA方法。 但是我正在阅读JPA教程,其中使用对象可以对数据执行CRUD,而无需使用Hibernate库! 所以任何人都可以让我知道 是否可以单独使用JPA 而不使用Hibernate 来使用方法? 请提及一些有用的链接或示例。 非常感谢您的回应。 谢谢。 问题答案: 您是正确的JPA是规范