下载网页的部分内容

下载网页的部分内容

我想“解析”一些网页列表(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后添加。 (复制)curltime

答案1

使用正确的方法尝试此操作表达 :

命令 :

saxon-lint --html --xpath '//title/text()' http://domain.tld/path

查看撒克逊林特(自己的项目)

你可以测试(但是大多数时候你需要隐藏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}'

答案3

通常,HTTP 性能的限制因素是延迟,而不是带宽。因此,我不希望仅加载页面的一部分会对性能产生重大影响。然而,HTTP 确实提供了一种执行此操作的机制 - 范围请求。而且当然,cURL 支持

然而没有对标题的硬性要求出现在 HTML 内容的开头附近,只是它出现在头脑中

大约有 400 个页面,加载整个页面需要花费大量时间

如上所述,我认为您不会在这里获得太多收益(尽管如果我错了,那么您应该考虑实现基于流的处理器而不是数据报模型)。如果您想更快地获得结果,请将工作负载分片并并行运行多个处理程序。

相关内容