使用wget从URL中提取n级链接

时间:2015-07-20 23:49:47

标签: bash shell wget

  

我正在尝试从网页中提取URL到用户定义的n个级别   使用wget。我试过这个

 wget -r -l$2 --reject=gif -O out.html www.google.com | sed -n 's/.*href="\([^"]*\).*/\1/p'` "
  

它只显示第一级。它没有解析任何级别   我怎么能纠正它

1 个答案:

答案 0 :(得分:0)

命令行中存在几个问题

wget -r -l$2 --reject=gif -O out.html www.google.com | sed -n 's/.*href="\([^"]*\).*/\1/p'` "
  1. 有多余的`和"在命令的最后。它们可能是复制粘贴错误。
  2. 正在运行sed 's/.*href="\([^"]*\).*/\1/p'有点天真,因为大多数页面可能在同一行上有很多引用,而某些标记可​​能会分成几行。
  3. 正则表达式没有结束"因此打印参考加上其余行
  4. 输出将写入文件out.html,并且不会将任何内容转发到stdout。它可以通过选项-O -进行更改。很遗憾,此选项不适用于-r-lx。所以解决方案是存储结果并执行两个命令。
  5. www.google.com可能会返回302 Found,其中包含指向本地化Google的位置,而wget不会递归到此本地化页面。
  6. 所以工作命令可以(没有经过测试 - 仅为你的灵感而写):

    $ wget  -nv -r -l1 --reject=gif -O x www.google.it
    WARNING: combining -O with -r or -p will mean that all downloaded content
    will be placed in the single file you specified.
    
    2015-07-21 14:30:26 URL:http://www.google.it/ [18842/18842] -> "x" [1]
    2015-07-21 14:30:26 URL:http://www.google.it/robots.txt [8170] -> "x" [1]
    2015-07-21 14:30:26 URL:http://www.google.it/images/srpr/nav_logo80.png [35615/35615] -> "x" [1]
    ...
    
    $ cat x| sed -e 's/href="/\nhref="/g' | sed -n 's/.*href="\([^"]*"\).*/\1/p'
    /search?"
    /AA61D1355AF544A297B61B2A6E00FF1C&css_id=bubble.min.css"
    http://www.google.it/imghp?hl=it&tab=wi"
    http://maps.google.it/maps?hl=it&tab=wl"
    https://play.google.com/?hl=it&tab=w8"
    http://www.youtube.com/?gl=IT&tab=w1"
    ...