2

我正在尝试使用pup解析一个简单的 HTML 页面。这是一个命令行 HTML 解析器,它接受一般的 HTML 选择器。

我要选择:

'div.aclass text{}' #(would be SampleA)

我还想选择:

'div.bclass text{}' #(would be SampleB)

我想连接它们并插入一些自定义文本以获得:

SampleA;MYEXTRASTRING;SampleB

我想避免多次调用 pup ,因为它很慢。

我可以选择多个标签:

'div.aclass text{}, div.bclass text{}'

但这将导致:

SampleA
SampleB

为此目的,还有比小狗更好的选择吗?

(注意:Python 不是一个选项,因为它对我的需求来说非常慢。)

4

1 回答 1

4

带有 pup 的多个选择器似乎不起作用,这里有一个问题: https ://github.com/ericchiang/pup/issues/59

为了达到您的目的,我建议使用hxselect命令,该命令可以在HTML-XML-utils中找到:https ://www.w3.org/Tools/HTML-XML-utils/README

例子:

curl -s http://example.com/ | hxselect -c 'body > div:nth-child(1) > h1:nth-child(1)', 'body > div:nth-child(1) > p:nth-child(3) > a:nth-child(1)' -s ';MYEXTRASTRING;' | sed 's/\(.*\);MYEXTRASTRING;/\1/'

卷曲部分:

curl用于下载http://exmaple.com的html内容

hxselect 部分:

hxselect 支持多个 CSS 选择器。使用,分隔这些选择器。

-c:只打印内容,不带html标签

-s:每次匹配后的分隔符文本。在你的情况下,它是;MYEXTRASTRING;

sed部分:

因为 -s 会为每个匹配添加分隔符文本,这意味着它将添加两次。sed 用于删除最后匹配的分隔符文本。

于 2019-01-04T21:35:53.510 回答