【问题标题】:Scraping information within HTML tags in unix with curl and cut使用 curl 和 cut 在 unix 中的 HTML 标记中抓取信息
【发布时间】:2019-01-25 13:28:31
【问题描述】:

我想找出 最简单 的方法来从 unix 中的远程资源中获取 HTML/XML 标记之间的内容。这是我认为它会起作用的方式。

curl https://www.google.com | grep "<title>" | cut -d '<title>' -f2 | cut -d '</title>' -f1

所以首先我 curl 资源,用我想要的标签 grep 出行(有时意味着整个 HTML,因为现在许多网站都被缩小了)。

然后我在开头 &lt;title&gt; 之后剪掉了所有东西,最后我在关闭 '' 之后剪掉了所有东西。

但这会导致错误:curl: (23) Failed writing body (0 != 8192)。 该错误似乎是因为cut 不支持除单个字符之外的任何分隔符。

我喜欢我的方法是一种非常简单的方法来获取我想要的数据,并且正在寻找另一种简单的方法来做到这一点。


此外,即使它确实有效,我的解决方案也只适用于 HTML 中的单个标记。出现多次的标签呢?

【问题讨论】:

  • 这对sed -n 来说是可行的,但就像其他人所说的那样,将html 解析为纯文本可能不是一个好主意。仅供参考,sed 方法如下所示:curl https://xkcd.com/ | grep "&lt;title&gt;" | sed -n "/&lt;title&gt;/,/&lt;\/title&gt;/p"

标签: bash unix awk sed cut


【解决方案1】:

W3 的这套工具似乎适合您的用例。 http://www.w3.org/Tools/HTML-XML-utils/README

对于足够小的东西,您可以使用this 之类的东西。 (我会用 Python+lxml 做其他事情)

记住:You can't parse [X]HTML with regex.

【讨论】:

  • 这很有趣,我去看看hxextract,谢谢。虽然这本质上是简单的文本操作,但我觉得使用原生 unix 实用程序应该很容易。特别是因为我可能想在其他非 html 网络格式(如 json 甚至纯文本)上使用它。
  • 对于 json 你应该检查jq,很棒的小工具。
【解决方案2】:

这在 py 或 php 等其他语言中可能会更容易,但是 html-xml-utils 包提供了一个很棒的工具(也有其他名称。

示例(ec2 linux AMI):

sudo rpm -ivh html-xml-utils-6.7-2.1.x86_64.rpm 
curl https://www.google.com | hxselect title
... ... ...
<title>Google</title>

更多信息: - https://www.w3.org/Tools/HTML-XML-utils/README

【讨论】:

  • 我在使用带有一些示例文档的库时遇到了问题:它们似乎总是会破坏解析引擎。 ``` $curl google.com | hxselect title 结束标记 与开始标记 不匹配 ``` 我已经联系了主要维护者以了解是否有接受贡献/问题的库的公共 repo。
  • @GuillaumeBerche 到目前为止,我通过hxclean(也是hxnormalize -x)解决了这个问题,然后发送到hxselect
猜你喜欢
  • 2011-07-06
  • 1970-01-01
  • 2018-10-27
  • 1970-01-01
  • 2018-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多