首页 > 解决方案 > Grep,awk 无法处理 HTML curl 文件(从 html 获取链接)

问题描述

我已经在 stackoverflow 上阅读了很多页面,但在我的 szenario 上没有任何效果。

我想从该网站获取包含“cedock”的最后一个匹配(或所有)URL:“https://4pda.ru/forum/index.php?showtopic=973246&st=4040#Spoil-97613600-1”

当我保存文件然后在我的文件编辑器中进行搜索时,它工作正常,但是这些命令都没有对我有用,以获取 url 或过滤此文件中的任何内容:

curl -k -s "https://4pda.ru/forum/index.php?showtopic=973246&st=4040#Spoil-97613600-1" | awk -F'SRC="|"' '/SRC/ && /'"cedock"'/  {print $4}'

curl -k -s "https://4pda.ru/forum/index.php?showtopic=973246&st=4040#Spoil-97613600-1" | grep -o 'FOTA-OTA/V8-R851T02-LF1V342.014883.zip.*zip</a><br /></div></div><br'

grep "<a href=" 4pda.txt |sed "s/<a href/\\n<a href/g" |sed 's/\"/\"><\/a>\n/2' |grep href |sort |uniq

网站本身有什么问题吗?因为我在其他网站上使用类似的命令并且它在那里工作。

所需的输出是 cedock 的最新下载 url,例如现在: http://na-update.cedock.com/apps/resource2/V8R851T02/V8-R851T02-LF1V351/FOTA-OTA/V8-R851T02-LF1V351 。 015103.zip

标签: bashawkgrep

解决方案


xmlstarlet

curl -k -s 'https://4pda.ru/forum/index.php?showtopic=973246&st=4040#Spoil-97613600-1' \
  | xmlstarlet format --html 2>/dev/null \
  | xmlstarlet select --template --value-of '//html/body/div/div[10]/div[2]/div[1]/div[2]/a[last()]/@href' -n

输出:

http://na-update.cedock.com/apps/resource2/V8R851T02/V8-R851T02-LF1V351/FOTA-OTA/V8-R851T02-LF1V351.015103.zip

我曾经xmlstarlet format --html从损坏的 HTML 中保存可纠正的部分。

更新

要获取域 na-update.cedock.com 的最后一个 URL:

curl -k -s 'https://4pda.ru/forum/index.php?showtopic=973246&st=4040#Spoil-97613600-1' \
  | xmlstarlet format --html 2>/dev/null \
  | xmlstarlet select --template --value-of '//a[last()]/@href[.=contains(.,"http://na-update.cedock.com")]' -n

推荐阅读