我想从上面的网址获取一些数据,我想获取搜索查询下的所有种子名称。
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']));
答案 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,因此您可以将收集数据并将其组合成所需的格式组合成一个样式表,并避免手动编写其中的一些。