标签: goutte

抓取列表以使用Goutte和PHP获取href的问题

我试图刮掉以下内容,我基本上想要文本和链接,我正在使用Goutte和PHP.我可以使用以下代码获得文本,但我无法获得href值.任何帮助都会很棒.

$crawler->filter('#most-popular > div > ol > li > a')->each(function ($node) {
    var_dump($node->getAttribute('href'));
});


<li class="first-child ol1">
  <a href="http://www.bbc.co.uk/news/uk-england-south-yorkshire-31895703" class="story">
    <span class="livestats-icon livestats-1">1: </span>MP claims £17 poppy wreath expenses</a>
</li>
Run Code Online (Sandbox Code Playgroud)

php web-scraping goutte

2
推荐指数
2
解决办法
5084
查看次数

使用goutte刮取数据-属性?

如何使用gouttelaraveldata-<a>链接中抓取属性?

我想刮一个标签,像这样:

<a class="ProfileNav-stat ProfileNav-stat--link u-borderUserColor u-textCenter js-tooltip js-nav u-textUserColor" data-nav="following" href="/rogerhamilton/following" data-original-title="987,358 Following">
Run Code Online (Sandbox Code Playgroud)

在此<a>链接中,我要刮擦data-original-title标签。

我的代码是:

$client = new Client();

//  Hackery to allow HTTPS
$guzzleclient = new \GuzzleHttp\Client([
    'timeout' => 60,
    'verify' => false,
]);

//  Hackery to allow HTTPS
$client->setClient($guzzleclient);
$crawler = $client->request('GET', 'url');


$elements = $crawler->filter('.ProfileNav-stat.ProfileNav-stat--link')->each(function($node){
    $x = $node->filter('data-original-title');
    dd($x);
});
Run Code Online (Sandbox Code Playgroud)

但它不会返回正确的数据。

html javascript php web-scraping goutte

2
推荐指数
1
解决办法
1163
查看次数

1
推荐指数
1
解决办法
3376
查看次数

更新匿名函数中的数组不起作用

我正在尝试使用一个名为 Goutte (php scraper/web-crawler) 的包,如下所示:

<?php

// Init
require_once 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
$reviews = array();

// Parse Review Site
$crawler = $client->request('GET', 'http://review-site-url-here');
$crawler->filter('div.review')->each(function($node) use ($reviews)
{
    // Parse Data
    $player_name = $node->filter('tr.switch > td > a')->first()->text();
    // other fields

    // Build Reviews
    array_push($reviews, [
        'player_name' => $player_name,
        // other fields
    ]);
});

// Debug
echo "<pre>";
print_r($reviews);
Run Code Online (Sandbox Code Playgroud)

当此脚本运行时,$reviews数组始终为空。但是,如果我print_r在匿名函数内,它似乎只显示每个循环中的当前元素。例如,如果有 4 条评论,我会这样做:

// Parse Review Site
$crawler = $client->request('GET', 'http://review-site-url-here');
$crawler->filter('div.review-BL-mid')->each(function($node) use ($reviews) …
Run Code Online (Sandbox Code Playgroud)

php arrays goutte domcrawler

1
推荐指数
1
解决办法
391
查看次数

Goutte Post JSON或设置cookie

我正在尝试使用Goutte提交表单.该表单使用jQuery将表单序列化为json并发布到url.提交后,它会更新浏览器的cookie.

我要么:

  1. 在Goutte中手动设置cookie,
  2. 或通过Goutte发送json帖子,以便更新cookie jar.

我尝试使用Goutte的addContent方法创建一个表单然后发布它,但它不是作为JSON发送的,只是一个常规的查询字符串.

html php symfony goutte

0
推荐指数
1
解决办法
5183
查看次数

尝试调用“DOMElement”类的名为“filter”的未定义方法

$goutte = new GoutteClient();
$crawler = $goutte->request('GET', 'https://www.website.com');
$reviewContent = $crawler->filter('.review-content');
$rows = $reviewContent->filter('.row');

foreach ($rows as $row) {
    $col1 = $row->filter('.col-md-3');
    $col2 = $row->filter('.col-md-9');
}
Run Code Online (Sandbox Code Playgroud)

给出错误$col1

我可以使用这个让它工作,但你不能使用,break因为它不是真正的for loop

$crawler->filter('.row')->each(function (Crawler $row, $i) {
    $col1 = $row->filter('.col-md-3');
    $col2 = $row->filter('.col-md-9');
    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

php goutte domcrawler

0
推荐指数
1
解决办法
1620
查看次数

Guzzle/Goutte - 基本抓取 - 将变量传递给请求

我目前正在使用一个名为Goutte的简单 php 爬虫。它使用Guzzle来执行 httpGET请求。我能够执行抓取操作。但是,我试图在内部传递/回显一个变量,filter但出现错误Undefined variable: x。变量已定义。将变量传递给过滤器的正确方法是什么?

$client = new Goutte\Client();
$crawler = $client->request('GET', 'http://github.com/');
$crawler = $client->click($crawler->selectLink('Sign in')->link());
$form    = $crawler->selectButton('Sign in')->form();
$x       = "hello";
$crawler = $client->submit($form, array('login' => 'xxxxx', 'password' => 'xxxxx'));
$crawler->filter('.flash-error')->each(function ($node) {
    echo $x;
    print $node->text() . "\n";
});
Run Code Online (Sandbox Code Playgroud)

php goutte guzzle

0
推荐指数
1
解决办法
1526
查看次数

抓取具有多个重定向的页面的最佳方式

我想抓取NCBI网站,并通过以下链接发送蛋白质局部比对的请求:http: //blast.ncbi.nlm.nih.gov/Blast.cgi?PROGRAM = blastp&BLAST_PROGRAMS = blastp&PAGE_TYPE = BlastSearch

我想知道我是否能够向此地址提交帖子请求,并使用PHP获取新页面中的结果.还有一个问题,在显示最终结果之前,页面经历了多次重定向 - 您可以使用以下输入进入文本区域来测试这种情况:

MHSSIVLATVLFVAIASASKTRELCMKSLEHAKVGTSKEAKQDGIDLYKHMFEHYPAMKKYFKHRENYTP
ADVQKDPFFIKQGQNILLACHVLCATYDDRETFDAYVGELMARHERDHVKVPNDVWNHFWEHFIEFLGSK
TTLDEPTKHAWQEIGKEFSHEISHHGRHSVRDHCMNSLEYIAIGDKEHQKQNGIDLYKHMFEHYPHMRKA
FKGRENFTKEDVQKDAFFVNKDTRFCWPFVCCDSSYDDEPTFDYFVDALMDRHIKDDIHLPQEQWHEFWK
LFAEYLNEKSHQHLTEAEKHAWSTIGEDFAHEADKHAKAEKDHHEGEHKEEHH
Run Code Online (Sandbox Code Playgroud)

这是我的尝试:

$link = 'http://blast.ncbi.nlm.nih.gov/Blast.cgi?
PROGRAM=blastp&BLAST_PROGRAMS=blastp&PAGE_TYPE=BlastSearch';

$request = array(
    'http' => array(
        'method' => 'POST',
        'content' => http_build_query(array(
            'QUERY' => $aaText
            )
        ),
    )
);

$context = stream_context_create($request);
$html = file_get_html($link, false, $context);
echo $html;
Run Code Online (Sandbox Code Playgroud)

这段代码为我提供了初始页面,好像没有完成POST一样.谢谢


UPDATE

我尝试过以下建议之一 - 古特.

这是我的新代码:

require_once 'goutte.phar';

use Goutte\Client;

$client = new Client();

$crawler = $client->request('GET', $link);

$form = $crawler->selectButton('b1')->form();

$crawler = $client->submit($form, array('QUERY' => $aaTest));

echo …
Run Code Online (Sandbox Code Playgroud)

php web-crawler ncbi goutte

-1
推荐指数
1
解决办法
1657
查看次数