首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cURL + JS_Extractor + php + MYSQL

cURL + JS_Extractor + php + MYSQL
EN

Stack Overflow用户
提问于 2009-12-07 23:30:37
回答 1查看 808关注 0票数 1

一些背景:

我在网上玩的游戏叫做末日之王..。

我在一个氏族里。我试图给出与我们相关的球员的统计数据。

为此,我必须从我只能在登录后才能访问的网页中检索球员的姓名。这一页是:

www.doomlord.net/index.php?m=szovetseg&sub=reszletes_statisztikak

但这只会带你到游戏的登录页面,而不是真正的页面。

为了访问真正的页面,我使用了cURL (登录并获得一个允许我漫游页面的cookie )。要从表中检索数据,我使用JS_extractor类。

问题是:

他们分开工作,但当他们一起使用时,他们的垃圾。

我试过什么:

1)

我使用了cURL,并表明我能够检索我需要的页面。

见此处: doomlord.tamtek.net/gettable.php

2)

我添加了js_extractor和cURL获取页面,但是js_extractor没有检索数据

见此处: doomlord.tamtek.net/gettable2.php

3)

我手动登录到末日领主的网站,我去了我需要的页面,我查看,然后“复制和粘贴”-ed的源代码。然后,我将源代码作为html页面上传到我的网站上,在那里我使用了js_extractor,它完美地将我需要的表放入一个数组中,以便进行进一步的管理.

页面来源: doomlord.tamtek.net/doomtest2.html

js_extractor结果: doomlord.tamtek.net/gettable3.php

至于守则:

(请原谅我多写了一些东西,但我正设法使它尽可能直观)

这是我使用的cURL代码:

代码语言:javascript
复制
$ckfile = tempnam ("tmp", "cookie.tmp");

$fields_string='';
$fields = array(
                  'username'=>urlencode(SITE_USER),
                  'jelszo'=>urlencode(SITE_PASS),
                  'vilag'=>urlencode(SITE_WORLD),
                  'tev'=>urlencode(SITE_TEV),
            );

foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
//rtrim($fields_string,'&');
$fields_string=substr($fields_string,0,-1);
//print_r($fields_string);
$ch=curl_init();
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
curl_setopt($ch,CURLOPT_URL,'http://www.doomlord.net');
curl_setopt($ch,CURLOPT_COOKIEJAR,$ckfile);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,20);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,3);
curl_setopt($ch,CURLOPT_MAXREDIRS,10);
$connect=curl_exec($ch);
$response1=curl_getinfo( $ch );
curl_close($ch);

  $ch=curl_init();
  curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
  curl_setopt($ch,CURLOPT_URL,'http://www.doomlord.net/index.php?m=szovetseg&sub=reszletes_statisztikak');
  curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,20);
  curl_setopt($ch,CURLOPT_COOKIEFILE,$ckfile);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
  curl_setopt($ch,CURLOPT_FOLLOWLOCATION,3);
  curl_setopt($ch,CURLOPT_MAXREDIRS,10);
  $connect=curl_exec($ch);
  $response1=curl_getinfo( $ch ); 
  print_r($connect);
//  print_r($response1);

curl_close($ch);

这是cURL和js_extractor代码结合在一起的代码:

代码语言:javascript
复制
<?php
session_start();

require_once('inc/constant.php');
require_once('inc/function.php');  //basic functions

$ckfile = tempnam ("tmp", "cookie.tmp");

$fields_string='';
$fields = array(
                  'username'=>urlencode(SITE_USER),
                  'jelszo'=>urlencode(SITE_PASS),
                  'vilag'=>urlencode(SITE_WORLD),
                  'tev'=>urlencode(SITE_TEV),
            );

foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
//rtrim($fields_string,'&');  //tried both commented out and not 
$fields_string=substr($fields_string,0,-1);
$ch=curl_init();
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
curl_setopt($ch,CURLOPT_URL,'http://www.doomlord.net');
curl_setopt($ch,CURLOPT_COOKIEJAR,$ckfile);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,20);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,3);
curl_setopt($ch,CURLOPT_MAXREDIRS,10);
$connect=curl_exec($ch);
$response1=curl_getinfo( $ch );
curl_close($ch);

  $ch=curl_init();
  curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
  curl_setopt($ch,CURLOPT_URL,'http://www.doomlord.net/index.php?m=szovetseg&sub=reszletes_statisztikak');
  curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,20);
  curl_setopt($ch,CURLOPT_COOKIEFILE,$ckfile);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
  curl_setopt($ch,CURLOPT_FOLLOWLOCATION,3);
  curl_setopt($ch,CURLOPT_MAXREDIRS,10);
  $connect=curl_exec($ch);
  $response1=curl_getinfo( $ch ); 
  print_r($connect); // just to show that i have connected
//  print_r($response1);

set_include_path(get_include_path() . PATH_SEPARATOR . './library/');
require_once 'JS/Extractor.php';

//$extractor = new JS_Extractor(file_get_contents('http://www.doomlord.net/index.php?m=szovetseg&sub=reszletes_statisztikak')); 
$extractor = new JS_Extractor(file_get_contents($connect)); // tried both ways
echo "</br />";
echo "This is the extractor:</br />";
var_dump($extractor);
echo "</br />";
echo "</br />";
$body = $extractor->query("body")->item(0);
echo "</br />";
echo "This is the body:</br />";
var_dump($body);
echo "</br />";
echo "</br />";
$table = $body->query("//table[@class=\"rstatisztika_tabla\"]")->item(0);
echo "</br />";
echo "This is the table:</br />";
var_dump($table);
echo "</br />";
echo "</br />";
$data = $table->extract(array("tr", "td"));
echo "</br />";
echo "This is the data:</br />";
var_dump($data);
echo "</br />";
echo "</br />";

curl_close($ch);
//}
?>

在我将源代码放在我的站点上之后,这是我用来获取表的js_extactor代码:

代码语言:javascript
复制
<?php

set_include_path(get_include_path() . PATH_SEPARATOR . './library/');
require_once 'JS/Extractor.php';

$extractor = new JS_Extractor(file_get_contents('http://doomlord.tamtek.net/doomtest2.html'));
echo "</br />";
echo "This is the extractor:</br />";
var_dump($extractor);
echo "</br />";
echo "</br />";
$body = $extractor->query("body")->item(0);
echo "</br />";
echo "This is the body:</br />";
var_dump($body);
echo "</br />";
echo "</br />";
$table = $body->query("//table[@class=\"rstatisztika_tabla\"]")->item(0);
echo "</br />";
echo "This is the table:</br />";
var_dump($table);
echo "</br />";
echo "</br />";
$data = $table->extract(array("tr", "td"));
echo "</br />";
echo "This is the data:</br />";
var_dump($data);
echo "</br />";
echo "</br />";
?>

最奇怪的是:

当我像这样运行脚本时:

代码语言:javascript
复制
$extractor = new JS_Extractor(file_get_contents($connect)); // this is line 53

,我也得到了这幅美:

代码语言:javascript
复制
*Warning*: file_get_contents(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://...@u="; var wa_referrer = "@r="; if(wa.WACID==null) { wa.WACID=wa.generateID('A'); wa.setCookie(wa.WACIDName,wa.WACID,wa.getTopDomain(wa.getDomain(document.URL))); } same = same + "@c=" + wa.WACID; if(screen) felbontas='@s='+screen.width+'x'+screen.height; if(document.referrer) wa_referrer=wa_referrer+document.referrer; if(document.URL) wa_url=wa_url+document.URL; same = same + felbontas + wa_url + wa_referrer; //--> </SCRIPT> </head> <body> <SCRIPT language="JavaScript"> <!-- document.write('<!-- Medián WebAudit HarmoNet Vegzetur 1/2 --><img style="position:absolute;top:-100px;left:-100px" src="http://audit.median.hu/cgi-bin/track.cgi?uc=12283086407878&dc=1&ui='+same+'" width="1" height="1">'); //--> </SCRIPT> <NOSCRIPT> <!-- M in */home2/tamtek/public_html/doomlord/gettable2.php* on line *53*

这很有趣,因为它从网页中删除了57行代码

代码语言:javascript
复制
*Warning*: file_get_contents(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://

代码语言:javascript
复制
@u="; var wa_referrer = "@r=";

在第一条线上。然后再打印一些,然后忽略其余的..。并在第53行给出了一个错误

我想,这是对一个特殊角色的解释,它会使页面的其余部分消失,但我不知道它可能是什么,也不知道如何摆脱它.

有没有人对什么可能出了问题有任何建议?

顺便说一下这是你能找到JS萃取器的地方..。jacksleight.com/old/blog/2008/02/10/js-extractor-and-the-death-of-table-extractor

如果你想玩一场免费游戏,并且真的想帮忙,你可以加入这里:

www.doomlord.net/?kar=147

你只需要一个电子邮件地址,不需要其他任何东西。

确保你选择了钻石部落(否则你将无法加入我的家族,使这是一个徒劳无益的活动)

加入我的家族,也就是“女孩大战”(这是你进入原始页面www.doomlord.net/index.php?m=szovetseg&sub=reszletes_statisztikak的唯一途径。)

但即使没有加入,我想我在这里也提供了足够的数据,希望能看到什么在涌出.

如果你认为你能帮上忙,但你需要更多的数据,请随便问.

谢谢。

泰森

EN

回答 1

Stack Overflow用户

发布于 2009-12-08 06:26:49

我刚刚解决了我自己的问题..。

谁会想到..。

我没有试图直接获取表数据,但不幸地失败了,而是将文件写入一个临时文件,然后从那里提取表数据.

还记得我告诉过你脚本对本地文件起作用吗?

所以我把这个文件作为我的本地文件:-)

以下是我所做的:

代码语言:javascript
复制
<?php
session_start();

require_once('inc/constant.php');
require_once('inc/function.php');  //basic functions
db_on();

$ckfile = tempnam ("tmp", "cookie.tmp");

$fields_string='';
$fields = array(
                  'username'=>urlencode(SITE_USER),
                  'jelszo'=>urlencode(SITE_PASS),
                  'vilag'=>urlencode(SITE_WORLD),
                  'tev'=>urlencode(SITE_TEV),
            );

foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
//rtrim($fields_string,'&');
$fields_string=substr($fields_string,0,-1);
//print_r($fields_string);
$ch=curl_init();
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
curl_setopt($ch,CURLOPT_URL,'http://www.doomlord.net');
curl_setopt($ch,CURLOPT_COOKIEJAR,$ckfile);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,20);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,3);
curl_setopt($ch,CURLOPT_MAXREDIRS,10);
$connect=curl_exec($ch);
$response1=curl_getinfo( $ch );
$fp=fopen('temp.html','w'); //create my temp file here
fclose($fp);
curl_close($ch);

  $ch=curl_init();
  curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
  curl_setopt($ch,CURLOPT_URL,'http://www.doomlord.net/index.php?m=szovetseg&sub=reszletes_statisztikak');
  curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,20);
  curl_setopt($ch,CURLOPT_COOKIEFILE,$ckfile);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
  curl_setopt($ch,CURLOPT_FOLLOWLOCATION,3);
  curl_setopt($ch,CURLOPT_MAXREDIRS,10);
  $connect=curl_exec($ch);
  $response1=curl_getinfo( $ch ); 
// and this is the key here
  $fp=fopen('temp.html','a');
  fputs($fp, $connect);
  fclose($fp);
curl_close($ch);

// now my the extractor works
set_include_path(get_include_path() . PATH_SEPARATOR . './library/');
require_once 'JS/Extractor.php';

$extractor = new JS_Extractor(file_get_contents('temp.html'));
$body = $extractor->query("body")->item(0);
$table = $body->query("//table[@class=\"rstatisztika_tabla\"]")->item(0);
$data = $table->extract(array("tr", "td"));
echo "</br />";
echo "This is the data:</br />";
var_dump($data);
echo "</br />";
echo "</br />";
?>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1863636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档