如何使用DOM Parser或xpath解析此信息?

时间:2013-12-26 23:01:48

标签: html parsing dom xpath

我想从上面的网址获取一些数据,我想获取搜索查询下的所有种子名称。

http://kickass.to/usearch/grand%20theft%20auto%20v%20category:ps3/

目前我得到了这段代码,但它只是从页面获取html源代码,如果有人可以帮我解析源代码中的所有torrent名称,那就太棒了。

function get_web_page( $url )
{
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER         => false,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_ENCODING       => "",
CURLOPT_USERAGENT      => "spider",
CURLOPT_AUTOREFERER    => true,
CURLOPT_CONNECTTIMEOUT => 120,
CURLOPT_TIMEOUT        => 120,
CURLOPT_MAXREDIRS      => 10,
);

$ch      = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$err     = curl_errno( $ch );
$errmsg  = curl_error( $ch );
$header  = curl_getinfo( $ch );
curl_close( $ch );

$header['errno']   = $err;
$header['errmsg']  = $errmsg;
$header['content'] = $content;
return $header;
}

$data =  get_web_page('http://kickass.to/usearch/grand%20theft%20auto%20v%20category:ps3/');
print_r(htmlspecialchars($data['content']));

2 个答案:

答案 0 :(得分:1)

是否需要使用PHP?

如果没有,以下groovy脚本可以解决您的问题:

@Grab('org.codehaus.groovy.modules.http-builder:http-builder:0.6')

import groovyx.net.http.*
import groovy.xml.*

def http = new HTTPBuilder('http://kickass.to/usearch/grand%20theft%20auto%20v%20category:ps3/')

def html = http.get(path: '')

html.'**'.findAll { it.@class == 'torrentname' }.each { torrentNameDiv ->
  def titleLink = torrentNameDiv.'*'.findAll { it.@class.text().contains('normalgrey') }?.getAt(0)
  def title = titleLink.'*'.findAll { it.name() == 'STRONG' && it.@class == 'red' }.join(' ')
  def info = titleLink[0].children().findAll { it instanceof String }.join(' ')
  println "title=$title"
  println "info=$info"
}

幕后有HTTPBuilder,XmlSlurper和GPathResult等常规类。 HTML结构的导航是通过GPathResult完成的。​​

此处的文档:

http://groovy.codehaus.org/api/groovy/util/slurpersupport/GPathResult.html

http://groovy.codehaus.org/modules/http-builder/home.html

此处示例:

http://binarybuffer.com/2012/05/parsing-html-pages-like-a-boss-with-groovy

答案 1 :(得分:0)

除非html文档是xhtml,否则它可能不是格式良好的XML,你需要一个HTML解析器而不是XML解析器......或者你需要使用类似W3C的东西将它预处理成xhtml“整理“工具,然后将其解析为XML。

一旦将其纳入标准W3C DOM,请检查该DOM实现是否提供了XPath的实现。如果没有,也可以使用针对用户提供的DOM运行的现成XPath实现 - Apache Xalan就是一个明显的例子。 Xalan还实现了XSLT,因此您可以将收集数据并将其组合成所需的格式组合成一个样式表,并避免手动编写其中的一些。