如何从bash中的某些标题中提取网页内容?

时间:2013-12-25 20:37:13

标签: html bash curl w3m

到目前为止,我在curlw3m使用sed来提取网页的部分内容,例如<body> ....内容...... {{1} }。我想忽略所有其他标头(例如</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对其进行短语并将其保存到另一个文件中。我只想简单地使用这段代码。我想知道是否有w3mlynx方法允许您使用指定的标头提取网页内容。因此,如果我想从这个内容中提取某些内容(www.badexample.com&lt; ---实际上不是链接):

hmtl2text

是否有程序可以指定提取内容的参数?所以我会指定<title>blah......blah...</title> <body> Some text I need to extract </body> more stuffs ,它只会在那些标题中提取内容?

2 个答案:

答案 0 :(得分:1)

必须在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();

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