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

时间:2014-03-20 15:08:30

标签: regex bash curl awk

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

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

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

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

2 个答案:

答案 0 :(得分: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 :(得分:1)

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

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

这将提取其中包含“ title”一词的所有行。要提取标题标签,您需要稍微更改grep-o标志可确保仅打印grepped结果:

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

需要注意的几件事:
  • 如果要提取某些数据,则需要\转义字符。
    • 例如,对于HTML属性,您应将单引号和双引号匹配,并像[\"\']那样对它们进行转义
  • 有时,根据字符集,您可能会得到带有特殊字符的异常curl输出。如果检测到此错误,则需要使用iconv
  • 之类的实用程序来切换编码