具有 Xidel + 垃圾收集功能的负正则表达式



我目前使用此命令从站点中提取URL

xidel https://www.website.com --extract "//h1//extract(@href, '.*')[. != '']"

这将提取所有 URL (.*(,但我想以一种不会提取在其 URI 路径中包含特定字符串的 URL 的方式更改它。例如,我想提取所有URL,除了包含-text1--text2-的URL

此外,xidel 有一个叫做垃圾收集的功能,但我不清楚如何使用这些功能。我可能是

--extract garbage-collect()

--extract garbage-collect()[0]

x:extract garbage-collect()

x"extract garbage-collect()

但是在使用--follow从多个页面中提取URL时,这些并没有减少内存使用量。

刚刚注意到这个老问题。看起来OP的帐户已被暂停,因此我希望以下答案对其他用户有所帮助。

让我们假设"测试.htm">

<html>
  <body>
    <span class="a-text1-u">1</span>
    <span class="b-text2-v">2</span>
    <span class="c-text3-w">3</span>
    <span class="d-text4-x">4</span>
    <span class="e-text5-y">5</span>
    <span class="f-text6-z">6</span>
  </body>
</html>

要提取所有"类"节点,除了包含"-text1-"和"-text2-"的节点:

xidel -s test.htm -e "//span[not(contains(@class,'-text1-') or contains(@class,'-text2-'))]/@class"
#or
xidel -s test.htm -e "//@class[not(contains(.,'-text1-') or contains(.,'-text2-'))]"
c-text3-w
d-text4-x
e-text5-y
f-text6-z

Xidel 有一个名为垃圾收集的功能,但我不清楚如何使用这些功能。

http://www.benibela.de/documentation/internettools/xpath-functions.html#x-garbage-collect:

x:垃圾收集 (0 参数(

释放未使用的内存。始终将其称为 garbage-collect()[0] ,否则它可能会垃圾回收自己的返回值和崩溃。

所以那将是-e "garbage-collect()[0]".

最新更新