我正在使用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'})
现在在上面的代码中,我们可以findAll
用来获取标签和与其相关的信息,但是我想使用xpath。是否可以将xpath与BeautifulSoup一起使用?如果可能的话,任何人都可以给我提供示例代码,以使其更有帮助吗?
不,BeautifulSoup本身不支持XPath表达式。
另一种库,LXML, 不 支持的XPath
1.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)
还有一个带有附加功能的专用lxml.html()
模块。
请注意,在上面的示例中,我将response
对象直接传递给lxml
,因为直接从流中读取解析器比将响应首先读取到大字符串中更有效。要对requests
库执行相同的操作,您需要在启用透明传输解压缩后设置stream=True
并传递response.raw
对象:)
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)
您可能会感兴趣的是CSS选择器支持;在CSSSelector
类转换CSS语句转换为XPath表达式,使您的搜索td.empformbody
更加容易:
from lxml.cssselect import CSSSelector
td_empformbody = CSSSelector('td.empformbody')
for elem in td_empformbody(tree):
# Do something with these table cells.
即将来临:BeautifulSoup本身 确实
具有非常完整的CSS选择器支持:
for cell in soup.select('table#foobar td.empformbody'):
# Do something with these table cells.
我正在使用BeautifulSoup刮取一个URL,并使用以下代码查找标记,其类为: 现在,在上面的代码中,我们可以使用获取标记和与它们相关的信息,但我想使用XPath。是否可以将XPath与BeautifulSoup一起使用?如果可能,请给我提供示例代码。
问题内容: 我看到了其他有关xpath 2.0的问题,它显然简化了字符串表达式。我正在使用Firefox 3.5.5和Selenium 1.0.1。 如何检查我的Firefox和Selenium版本是否支持它? Selenium是否遵循Firefox的内置Xpath实现? 在那种情况下,如果我开始将另一个(也许是较旧的)浏览器与selenium一起使用,是否会因为期望xpath 2.0而遇到问题?
就像在主题中一样,我可以使用Thymeleaf布局方言和spring吗?我必须使用Spring标准方言吗? 网上有这么多的资料,这让我很困惑。 我已经开始使用布局方言,但我无法使用整个应用程序。 这是我的模板主文件: 以及控制器返回的我的示例主体文件: 但不幸的是,这段代码只适用于布局方言。 有人能帮我把代码转换成spring标准方言吗? 我的手机配置:
问题内容: 我正在使用大猩猩架构根据用户的表单提交来填充结构。我的结构包含,并且我目前收到以下错误: 如何在要使用大猩猩架构填充的结构中使用? 问题答案: 我创建了一个要点(https://gist.github.com/carbocation/51b55297702c7d30d3ef),它显示了解决此问题的一种方法。您需要为以下四种类型的每一种创建一个:sql.NullString,sql.Nu
问题内容: 我有一类范围 如果我使用正常的工作原理是完美的,但是必须等待每个命令完成并且每个查询需要8秒钟,所以10个查询需要80秒钟。 在并行版本中,如果仅打印范围,则效果很好,但如果尝试执行命令,则说明该过程已在进行中。 {“操作已经在进行中。”} 我该如何解决? 问题答案: Npgsql连接不能同时使用-在任何给定时间点只能运行一个命令(换句话说,没有MARS支持)。 打开多个连接以并行执行
问题内容: 是否可以使用Node.js在服务器端使用jQuery选择器/ DOM操作? 问题答案: 似乎有一个重大更新,导致原来的答案不再起作用。我找到了这个答案,解释了现在如何使用。我已经在下面复制了相关代码。 注意:原始答案没有提及你还需要使用安装