#php #symfony #web-scraping #web-crawler #guzzle
Вопрос:
Я хочу очистить веб-сайт и использую guzzle 7.4 и Symfony Dom Crawler
Я успешно извлек данные HTML, но веб-сайт использует CDN для размещения некоторых ресурсов, и они не загружаются, потому что заголовок не отправляется для получения этих ресурсов
ниже приведен код, извлекающий html
lt;?php require "vendor/autoload.php"; use SymfonyComponentDomCrawlerCrawler; // Url $url = 'scrapingdomain.com'; $headers = [ 'referer' =gt; 'examplescrapingdomain.com' ]; $client = new GuzzleHttpClient([ 'headers' =gt; $headers ]); // go get the data from url $response = $client-gt;request('GET', $url); $html = ''.$response-gt;getBody(); $crawler = new Crawler($html); echo $html; ?gt;
Если я обращусь непосредственно к CDN и установлю заголовок referer, я получу ответ 200
Ниже Приведен Код
lt;?php require "vendor/autoload.php"; use SymfonyComponentDomCrawlerCrawler; // Url $url = 'examplecdnresource.com/Images.png'; $headers = [ 'referer' =gt; 'examplescrapingdomain.com' ]; $client = new GuzzleHttpClient([ 'headers' =gt; $headers ]); // go get the data from url $response = $client-gt;request('GET', $url); $html = ''.$response-gt;getBody(); $crawler = new Crawler($html); echo $html; ?gt;
Я хочу получить scrapdomain.com получите ресурсы и загрузите размещенные на cdn изображения, которые у него есть
Комментарии:
1. Похоже, вы знаете проблему и большую часть решения. Вам нужно будет загрузить HTML, затем загрузить ресурсы с поддельными/поддельными заголовками, а затем переписать ранее загруженный HTML, чтобы указать на эти ресурсы.
2. Как мне это сделать?
3. Вам нужно будет поискать несколько руководств по очистке экрана. Вы загружаете example.com/index.php, и то же самое, что и index.html. Затем вы анализируете это, находите cdn.example.com/style.css, загрузите и сохраните локально, затем обновите index.html чтобы указать на это. Повторите с каждым ресурсом.
Ответ №1:
Все, что мне нужно было сделать, чтобы получить контент, размещенный на CDN, внутри очищенного html, — это использовать функцию file_get_content и установить поток ссылок для загрузки данных без внутренней жратвы, так как я получал файлы css и изображений