从 HTML 中提取数据的简单方法

从 HTML 中提取数据的简单方法

当我检索一个网页后

curl -X POST http://example.com/data/123

我得到这样的回应:

<td><a href="http://help.example.com " target="_blank">help.example.com</a></td>
<td><a href="http://hello.example.com " target="_blank">hello.example.com</a></td>
<td><a href="http://test.example.com " target="_blank">test.example.com</a></td>

从上面的响应中,我想一一获取所有子域,没有标记,例如:

help.example.com
hello.example.com
test.example.com

答案1

您可以使用sed

$ cat test

<td><a href="http://help.domain.com " target="_blank">help.domain.com</a></td>
<td><a href="http://hello.domain.com " target="_blank">hello.domain.com</a></td>
<td><a href="http://test.domain.com " target="_blank">test.domain.com</a></td>

$ sed 's/^.*">//;s/<.*//' test

help.domain.com
hello.domain.com
test.domain.com

答案2

您可以使用awk

awk -F'">|</' '{ print $2 }' file

输出:

help.domain.com
hello.domain.com
test.domain.com

答案3

也许尝试一下lynx

lynx -dump -listonly -nonumbers  http://example.com/data/123 | awk -F'[/:]+' '{print $2}'

猫文件.html

<td><a href="http://help.example.com " target="_blank">help.example.com</a></td>
<td><a href="http://hello.example.com " target="_blank">hello.example.com</a></td>
<td><a href="http://test.example.com " target="_blank">test.example.com</a></td>
lynx -dump -listonly -nonumbers  file.html | awk -F'[/:]+' '{print $2}'

输出

help.example.com
hello.example.com
test.example.com

答案4

如果这是一项一次性任务,其他答案可能就可以了。

对于其他一切,请使用适当的 xml 或 html 解析器!

例如: BeautifulSoup:

curl -X POST http://example.com/data/123 | python -c '
from bs4 import BeautifulSoup
import sys
soup=BeautifulSoup(sys.stdin,"lxml")
for a in soup.find_all("a"):
  print(a.string)
'

输出:

help.example.com
hello.example.com
test.example.com

您可能需要bs4通过安装pip

当然你不需要curl,当你请求页面直接来自python.

相关内容