在文件的每一行上运行curl命令并从结果中获取数据

问题描述 投票:5回答:2

假设我有一个包含网页链接列表的文件。

www.xyz.com/asdd
www.wer.com/asdas
www.asdas.com/asd
www.asd.com/asdas

我知道做curl www.xyz.com/asdd会获取该网页的html。我想从该网页获取一些数据。

所以场景是使用curl逐个命中文件中的所有链接,从网页中提取一些数据并存储在其他地方。任何想法或建议。

regex bash curl awk
2个回答
6
投票

如评论中所示,这将循环通过your_filecurl每行:

while IFS= read -r line
do
   curl "$line"
done < your_file

要获得页面的<title>,你可以像这样:grep

grep -iPo '(?<=<title>).*(?=</title>)' file

所以你们可以一起做

while IFS= read -r line
do
   curl -s "$line" | grep -Po '(?<=<title>).*(?=</title>)'
done < your_file

注意curl -s用于静音模式。查看google page的示例:

$ curl -s http://www.google.com | grep -Po '(?<=<title>).*(?=</title>)'
302 Moved

1
投票

您可以使用xargs在一行中完成此操作。假设您在工作目录中有一个文件,其中包含所有URL(每行一个),名为sitemap

xargs -I{} curl -s {} <sitemap | grep title

这将提取任何带有“title”字样的行。要提取标题标签,您需要稍微更改grep-o标志确保只打印grepped结果:

xargs -I{} curl -s {} <sitemap | grep -o "<title>.*</title>"

A couple of things to note:
  • 如果要提取某些数据,则需要\转义字符。 例如,对于HTML属性,您应该匹配单引号和双引号,并像[\"\']一样转义它们
  • 有时,根据字符集,您可能会获得一些带有特殊字符的不寻常的curl输出。如果您检测到这一点,则需要使用iconv等实用程序切换编码
© www.soinside.com 2019 - 2024. All rights reserved.