python - 使用 lxml 解析 html

标签 python xpath lxml

我有以下html代码

<a name="Audio-Encoders"></a>
<h1 class="chapter"><a href="ffmpeg.html#toc-Audio-Encoders">14. Audio Encoders</a></h1>

<p>A description of some of the currently available audio encoders
follows.
</p>
<a name="ac3-and-ac3_005ffixed"></a>
<h2 class="section"><a href="ffmpeg.html#toc-ac3-and-ac3_005ffixed">14.1 ac3 and     ac3_fixed</a></h2>

<p>AC-3 audio encoders.
</p>
<p>These encoders implement part of ATSC A/52:2010 and ETSI TS 102 366, as well as
the undocumented RealAudio 3 (a.k.a. dnet).
</p>
<p>The <var>ac3</var> encoder uses floating-point math, while the <var>ac3_fixed</var>
encoder only uses fixed-point integer math. This does not mean that one is
always faster, just that one or the other may be better suited to a
particular system. The floating-point encoder will generally produce better
quality audio for a given bitrate. The <var>ac3_fixed</var> encoder is not the
default codec for any of the output formats, so it must be specified explicitly
using the option <code>-acodec ac3_fixed</code> in order to use it.
</p>
<a name="AC_002d3-Metadata"></a>
<h3 class="subsection"><a href="ffmpeg.html#toc-AC_002d3-Metadata">14.1.1 AC-3     Metadata</a></h3>

<p>The AC-3 metadata options are used to set parameters that describe the audio,
but in most cases do not affect the audio encoding itself. Some of the options
do directly affect or influence the decoding and playback of the resulting
bitstream, while others are just for informational purposes. A few of the
options will add bits to the output stream that could otherwise be used for
audio data, and will thus affect the quality of the output. Those will be
indicated accordingly with a note in the option list below.
</p>
<p>These parameters are described in detail in several publicly-available
documents.
</p><ul>

如何从 <hX class="foobar"> 之后的每一个中提取文本?

例如<h1 class="chapter"> h1标签后的内容是“对目前可用的一些音频编码器的描述 如下。”

最佳答案

使用:

/*/h1/following-sibling::p
         [name(preceding-sibling::*[starts-with(name(),'h')][1])
         = 'h1'
         ]//text()

根据以下 XML 文档评估此 XPath 表达式(从格式不正确的提供片段中获取,但删除尾随未闭合的 ul 并将结果包装到单个顶部元素):

<html>
    <a name="Audio-Encoders"></a>
    <h1 class="chapter">
        <a href="ffmpeg.html#toc-Audio-Encoders">14. Audio Encoders</a>
    </h1>
    <p>A description of some of the currently available audio encoders follows. </p>
    <a name="ac3-and-ac3_005ffixed"></a>
    <h2 class="section">
        <a href="ffmpeg.html#toc-ac3-and-ac3_005ffixed">14.1 ac3 and     ac3_fixed</a>
    </h2>
    <p>AC-3 audio encoders. </p>
    <p>These encoders implement part of ATSC A/52:2010 and ETSI TS 102 366, as well as the undocumented RealAudio 3 (a.k.a. dnet). </p>
    <p>The 
        <var>ac3</var> encoder uses floating-point math, while the 
        <var>ac3_fixed</var> encoder only uses fixed-point integer math. This does not mean that one is always faster, just that one or the other may be better suited to a particular system. The floating-point encoder will generally produce better quality audio for a given bitrate. The 
        <var>ac3_fixed</var> encoder is not the default codec for any of the output formats, so it must be specified explicitly using the option 
        <code>-acodec ac3_fixed</code> in order to use it. 
    </p>
    <a name="AC_002d3-Metadata"></a>
    <h3 class="subsection">
        <a href="ffmpeg.html#toc-AC_002d3-Metadata">14.1.1 AC-3     Metadata</a>
    </h3>
    <p>The AC-3 metadata options are used to set parameters that describe the audio, but in most cases do not affect the audio encoding itself. Some of the options do directly affect or influence the decoding and playback of the resulting bitstream, while others are just for informational purposes. A few of the options will add bits to the output stream that could otherwise be used for audio data, and will thus affect the quality of the output. Those will be indicated accordingly with a note in the option list below. </p>
    <p>These parameters are described in detail in several publicly-available documents. </p>
</html>

选择想要的文本节点(在本例中只有一个):

A description of some of the currently available audio encoders follows.

类似地,这个 XPath 表达式:

/*/h2/following-sibling::p
         [name(preceding-sibling::*[starts-with(name(),'h')][1])
         = 'h2'
         ]//text()

选择这些文本节点:

AC-3 audio encoders. These encoders implement part of ATSC A/52:2010 and ETSI TS 102 366, as well as the undocumented RealAudio 3 (a.k.a. dnet). The 
        ac3 encoder uses floating-point math, while the 
        ac3_fixed encoder only uses fixed-point integer math. This does not mean that one is always faster, just that one or the other may be better suited to a particular system. The floating-point encoder will generally produce better quality audio for a given bitrate. The 
        ac3_fixed encoder is not the default codec for any of the output formats, so it must be specified explicitly using the option 
        -acodec ac3_fixed in order to use it. 

最后,这个 XPath 表达式:

/*/h3/following-sibling::p
         [name(preceding-sibling::*[starts-with(name(),'h')][1])
         = 'h3'
         ]//text()

选择这些文本节点:

The AC-3 metadata options are used to set parameters that describe the audio, but in most cases do not affect the audio encoding itself. Some of the options do directly affect or influence the decoding and playback of the resulting bitstream, while others are just for informational purposes. A few of the options will add bits to the output stream that could otherwise be used for audio data, and will thus affect the quality of the output. Those will be indicated accordingly with a note in the option list below. These parameters are described in detail in several publicly-available documents. 

关于python - 使用 lxml 解析 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12552238/

相关文章:

python - 在 Mac 上的 Python 中使用 lxml 时收到 'ImportError: cannot import name etree'

Python RDF lib - 节点的字符串值

python - 小写前 n 个字符

ruby - 使用 Nokogiri 提取 RSS 链接

javascript - 记住html页面中突出显示的文本(给html页面添加注释)

php - Xpath php 获取链接

python - 使用 XPath 查找最上面的以下元素

python - PyTorch - 沿新维度的张量乘法

python - 在 Python 中检测 *nix 中的键盘布局

python - lxml: undefined variable etree