php - PHP 的抓取库 - phpQuery?

标签 php screen-scraping phpquery

我正在寻找一个 PHP 库,它允许我删除网页并处理所有 cookie 并使用默认值预填充表单,这是最让我烦恼的。

我厌倦了必须将每个输入元素与 xpath 匹配,如果存在更好的东西我会很高兴。我遇到过 phpQuery 但手册不是很清楚,我无法找到如何发出 POST 请求。

有人可以帮助我吗?谢谢。

@Jonathan Fingland:

在 browserGet() 手册提供的示例中,我们有:

require_once('phpQuery/phpQuery.php');

phpQuery::browserGet('http://google.com/', 'success1');

function success1($browser)
{
    $browser->WebBrowser('success2')
    ->find('input[name=q]')->val('search phrase')
    ->parents('form')
    ->submit();
}

function success2($browser)
{
    echo $browser;
}

我想所有其他字段都被废弃并在 GET 请求中发回,我想用 phpQuery::browserPost() 方法做同样的事情,但我不知道该怎么做。我试图抓取的表单有一个输入 token ,我希望 phpQuery 能够足够聪明地抓取 token 并让我更改其他字段(在本例中为用户名和密码),通过 POST 提交所有内容。

PS:请放心,这不会用于发送垃圾邮件。

最佳答案

参见 http://code.google.com/p/phpquery/wiki/Ajax,特别是:

phpQuery::post($url, $data, $callback, $type)

# data Object, String 将数据参数定义为对象或字符串。 POST 请求应该可以使用查询字符串格式,例如:

$data = "username=Jon&password=123456";
$url = "http://www.mysite.com/login.php";
phpQuery::post($url, $data, $callback, $type)

因为 phpQuery 是一个 jQuery 端口,方法签名是相同的(文档直接链接到 jquery 站点 -- http://docs.jquery.com/Ajax/jQuery.post)

编辑

两件事:

还有一个 phpQuery::browserPost 函数可能会更好地满足您的需求。

但是,另请注意,success2 回调仅在 submit() or click() 方法上调用,因此您可以在此之前填写所有表单字段。

例如

require_once('phpQuery/phpQuery.php');
phpQuery::browserGet('http://www.mysite.com/login.php', 'success1');
function success1($browser) {
  $handle = $browser
    ->WebBrowser('success2');
  $handle 
    ->find('input[name=username]')
      ->val('Jon');
  $handle 
    ->find('input[name=password]')
      ->val('123456');
      ->parents('form')
        ->submit();
}
function success2($browser) {
  print $browser;
}

(请注意,这尚未经过测试,但应该可以工作)

关于php - PHP 的抓取库 - phpQuery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1644669/

相关文章:

php - 长轮询超出最大执行时间

php - 将用户信息插入数据库php和mysql

C#,如何获取网页内容?

java - 使用 Jsoup 抓取雅虎答案

php - 我可以使用 phpQuery 找到完全匹配吗?

php - mySQL 主键异常

javascript - 如何从 HTML 按钮单击调用 PHP 函数?

Node.js:代理站点如何处理相对 URL?

mysql - Yii 多次更新查询

html - 如何使用 PHPQuery 删除 HTML 标签?