我试图刮掉以下内容,我基本上想要文本和链接,我正在使用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) 如何使用goutte和laraveldata-
从<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)
但它不会返回正确的数据。
理想情况下还可以在图像查看器中自动打开屏幕截图.
我正在尝试使用一个名为 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) 我正在尝试使用Goutte提交表单.该表单使用jQuery将表单序列化为json并发布到url.提交后,它会更新浏览器的cookie.
我要么:
我尝试使用Goutte的addContent
方法创建一个表单然后发布它,但它不是作为JSON发送的,只是一个常规的查询字符串.
$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) 我目前正在使用一个名为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) 我想抓取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) goutte ×8
php ×8
domcrawler ×2
html ×2
web-scraping ×2
arrays ×1
behat ×1
guzzle ×1
javascript ×1
ncbi ×1
screenshot ×1
selenium ×1
symfony ×1
web-crawler ×1