![下载网页的部分内容](https://linux22.com/image/128598/%E4%B8%8B%E8%BD%BD%E7%BD%91%E9%A1%B5%E7%9A%84%E9%83%A8%E5%88%86%E5%86%85%E5%AE%B9.png)
我想“解析”一些网页列表(html),“解析”只是将<title> </title>
标签之间的内容重定向到某些特定文件。首先,我for
用 循环wget
,然后得出结论(time
当然),curl
在这种情况下要快一些。
所以它看起来像:
for page in $(cat source.txt)
do
echo "$(curl -s https://somewebpage/some_sub_page/$page \
| grep '<title>' -A2 | sed -n '2p')" > tmp/$page/index
done
所有这些子页面都包含我感兴趣的信息<title>
,如下所示
<title>
...
</title>
所以我只是应用常见的 shell 工具来达到结果。我的问题是什么。对于大约 400 个页面,加载整个页面需要花费大量时间,然后再加载到grep
它等等。是否有一些更复杂的解决方案可以加载,例如仅加载 html 文档的前 10 行?我依赖经典的 bash 实用程序(curl、wget),但您可以推荐您认为更适合本期的内容。
UPD:也许这不是完美的解决方案,但在减少脚本两次head
后添加。 (复制)curl
time
答案1
使用正确的方法尝试此操作路径表达 :
命令 :
saxon-lint --html --xpath '//title/text()' http://domain.tld/path
查看撒克逊林特(自己的项目)
你可以测试xmllint(但是大多数时候你需要隐藏STDERR(并且不https
支持),因为HTML解析器不是那和我之前写的命令一样好)
xmllint --html --xpath '//title/text()' http://domain.tld/path 2>/dev/null
最后 :
for page in $(cat source.txt); do
chosen_command "https://somewebpage/some_sub_page/$page" > "/tmp/$page/index"
done
答案2
您可以将要获取的内容通过管道传输到此:
wget -4 -qO- {$query} |\
html2text |\
awk '/<title>/,/<\/title>/{print}'