【发布时间】:2023-04-06 06:39:01
【问题描述】:
我想抓取一个网站,并且正在使用 guzzle 7.4 和 Symfony Dom Crawler
我成功检索了 HTML 数据但是网站使用 CDN 托管一些资源并且它们没有加载,因为没有发送标头来获取这些资源
下面是获取html的代码
<?php
require "vendor/autoload.php";
use Symfony\Component\DomCrawler\Crawler;
// Url
$url = 'scrapingdomain.com';
$headers = [
'referer' => 'examplescrapingdomain.com'
];
$client = new \GuzzleHttp\Client([
'headers' => $headers
]);
// go get the data from url
$response = $client->request('GET', $url);
$html = ''.$response->getBody();
$crawler = new Crawler($html);
echo $html;
?>
如果我直接访问 CDN 并设置引用标头,我会得到 200 的响应
以下代码
<?php
require "vendor/autoload.php";
use Symfony\Component\DomCrawler\Crawler;
// Url
$url = 'examplecdnresource.com/Images.png';
$headers = [
'referer' => 'examplescrapingdomain.com'
];
$client = new \GuzzleHttp\Client([
'headers' => $headers
]);
// go get the data from url
$response = $client->request('GET', $url);
$html = ''.$response->getBody();
$crawler = new Crawler($html);
echo $html;
?>
我想获取 scrapdomain.com 获取资源并下载它拥有的 cdn 托管图像
【问题讨论】:
-
听起来您知道问题所在和大部分解决方案。您需要下载 HTML,然后下载带有欺骗/伪造标头的资源,然后重写您之前下载的 HTML 以指向这些资源。
-
我该怎么做?
-
你需要寻找一些关于屏幕抓取的教程。你下载example.com/index.php,和index.html一样。然后你解析它,找到 cdn.example.com/style.css,下载并保存在本地,然后更新 index.html 以指向它。对每个资源重复。
标签: php symfony web-scraping web-crawler guzzle