【问题标题】:How do I extract content from a webpage with certain headers in bash?如何从 bash 中具有某些标题的网页中提取内容?
【发布时间】:2014-01-13 14:54:34
【问题描述】:

到目前为止,我正在使用curl 以及w3msed 来提取网页的部分内容,例如<body>....内容....</body>。我想忽略所有其他标题(例如<a></a><div></div>)。除了我现在这样做的方式真的很慢。

curl -L "http://www.somewebpage.com" | sed -n -e '\:<article class=:,\:<div id="below">: p' > file.html 
w3m -dump file.html > file2.txt

上面这两行确实很慢,因为curl 是先将整个网页保存到一个文件中并对其进行短语化,然后w3m 对其进行短语化并将其保存到另一个文件中。我只想简单地编写这段代码。我想知道lynxhmtl2text 是否有办法让您提取具有指定标题的网页内容。所以就像我想从网页(www.badexample.com

<title>blah......blah...</title>
            <body>
                 Some text I need to extract
            </body>
 more stuffs

是否有一个程序可以指定提取内容的参数?所以我会指定someprogram &lt;body&gt;&lt;/body&gt; www.badexample.com,它只会提取那些标题中的内容?

【问题讨论】:

    标签: html bash curl w3m


    【解决方案1】:

    您可以为此使用 Perl 的一个内衬:

    perl -MLWP::Simple -e "print get ($ARGV[0]) =~ /<$ARGV[1]>(.*?)<\/$ARGV[1]>/;" http://www.example.com/ title
    

    您也可以传递整个正则表达式,而不是 html 标记:

    perl -MLWP::Simple -e "print get ($ARGV[0]) =~ /$ARGV[1]/;" "http://www.example.com/" "<body>(.*?)</body>"
    

    【讨论】:

    • 完美,非常感谢!这正是我要找的!
    【解决方案2】:

    必须在bash 中吗? PHPDOMDocument() 呢?

    $dom = new DOMDocument();
    $new_dom = new DOMDocument();
    
    $url_value = 'http://www.google.com';
    $html = file_get_contents($url_value);
    $dom->loadHTML($html);
    
    $body = $dom->getElementsByTagName('body')->item(0);
    
    foreach ($body->childNodes as $child){
      $new_dom->appendChild($new_dom->importNode($child, true));
    }
    
    echo $new_dom->saveHTML();
    

    【讨论】:

    • 非常感谢您的意见。问题是我还没有学过 PHP(我有计划),而我正在编写的程序是一个 bash 脚本(主要用于信息处理)。不是你的回答不够,只是我不知道怎么用。但我很确定其他人如果看到这个解决方案就可以使用它!非常感谢!
    猜你喜欢
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 2017-03-03
    相关资源
    最近更新 更多