我正在尝试使用 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
为此目的,还有比 pup 更好的选择吗?
(注意:Python 不是一个选择,因为它对于我的需求来说非常慢。)
最佳答案
带有 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 部分:
curl用于下载http://exmaple.com的html内容
hxselect部分:
hxselect 支持多个 CSS 选择器。使用 , 分隔这些选择器。
-c:只打印内容,不带html标签
-s:每次匹配后的分隔 rune 本。就您而言,它是 ;MYEXTRASTRING;
sed 部分:
因为每次匹配都会添加 -s 分隔 rune 本,这意味着会添加两次。 sed 用于删除最后匹配的分隔 rune 本。
关于html - 是否可以定义一个 HTML 选择器来连接多个选择器并用分号分隔它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54043845/