Сведения о вопросе

PASHA

20:00, 21st August, 2020

Теги

php   screen-scraping    

Как реализовать веб-скребок в PHP?

Просмотров: 470   Ответов: 10

Какие встроенные функции PHP полезны для веб-скрейпинга? Каковы некоторые хорошие ресурсы (веб или печать) для получения до скорости на веб-скрейпинга с PHP?



  Сведения об ответе

прога

19:24, 7th August, 2020

Выскабливание обычно включает в себя 3 этапа:

  • сначала вы GET или POST ваш запрос к указанному URL
  • далее вы получаете html, который возвращается как ответ
  • наконец вы разбираете из это html текст, который вы хотели бы получить царапина.

Для выполнения шагов 1 и 2 Ниже приведен простой класс php, который использует Curl для извлечения веб-страниц с помощью GET или POST. После того, как вы получите HTML обратно, вы просто используете регулярные выражения для выполнения шага 3, разбирая текст, который вы хотите очистить.

Для регулярных выражений моим любимым учебным сайтом является следующий: Учебник По Регулярным Выражениям

Моя любимая программа для работы с RegExs-это Regex Buddy . Я бы посоветовал вам попробовать демонстрацию этого продукта, даже если вы не собираетесь его покупать. Это бесценный инструмент и даже будет генерировать код для ваших регулярных выражений, которые вы делаете на вашем языке выбора (включая php).

Использование:

$curl = new Curl(); $html = $curl->get("http://www.google.com");

// now, do your regex work against $html


  Сведения об ответе

LAST

09:20, 6th August, 2020

Я рекомендую Goutte, простой PHP веб-скребок .

Пример Использования:-

Создайте экземпляр клиента Goutte (который расширяется Symfony\Component\BrowserKit\Client ):

use Goutte\Client;

$client = new Client();

Делайте запросы с помощью метода request() :

$crawler = $client->request('GET', 'http://www.symfony-project.org/');

Метод request возвращает объект Crawler (33).

Нажмите на ссылки:

$link = $crawler->selectLink('Plugins')->link();
$crawler = $client->click($link);

Отправить формы:

$form = $crawler->selectButton('sign in')->form();
$crawler = $client->submit($form, array('signin[username]' => 'fabien', 'signin[password]' => 'xxxxxx'));

Извлечь данные:

$nodes = $crawler->filter('.error_list');

if ($nodes->count())
{
  die(sprintf("Authentification error: %s\n", $nodes->text()));
}

printf("Nb tasks: %d\n", $crawler->filter('#nb_tasks')->text());

  Сведения об ответе

VCe znayu

15:27, 9th August, 2020

ScraperWiki -довольно интересный проект. Помогает вам построить скребки онлайн в Python, Ruby или PHP - я смог получить простую попытку за несколько минут.


  Сведения об ответе

fo_I_K

15:53, 14th August, 2020

Если вам нужно что-то, что легко поддерживать, а не быстро выполнять, это может помочь использовать браузер с поддержкой сценариев, например SimpleTest .


  Сведения об ответе

lats

15:19, 14th August, 2020

вот еще один пример: простой скребок PHP без Regex .


  Сведения об ответе

lool

09:42, 12th August, 2020

Выскабливание может быть довольно сложным, в зависимости от того, что вы хотите сделать. Прочтите эту учебную серию по основам написания скребка в PHP и посмотрите, сможете ли вы справиться с ним.

Вы можете использовать аналогичные методы для автоматизации регистрации форм, Логинов, даже поддельных кликов по объявлениям! Однако основные ограничения использования CURL заключаются в том, что он не поддерживает использование javascript, поэтому, если вы пытаетесь очистить сайт, который использует AJAX для разбиения на страницы, например, он может снова стать немного tricky...but, есть способы обойти это!


  Сведения об ответе

padenie

15:06, 26th August, 2020

Класс скребка из моего фреймворка:

<?php

/*
    Example:

    $site = $this->load->cls('scraper', 'http://www.anysite.com');
    $excss = $site->getExternalCSS();
    $incss = $site->getInternalCSS();
    $ids = $site->getIds();
    $classes = $site->getClasses();
    $spans = $site->getSpans(); 

    print '<pre>';
    print_r($excss);
    print_r($incss);
    print_r($ids);
    print_r($classes);
    print_r($spans);        

*/

class scraper
{
    private $url = '';

    public function __construct($url)
    {
        $this->url = file_get_contents("$url");
    }

    public function getInternalCSS()
    {
        $tmp = preg_match_all('/(style=")(.*?)(")/is', $this->url, $patterns);
        $result = array();
        array_push($result, $patterns[2]);
        array_push($result, count($patterns[2]));
        return $result;
    }

    public function getExternalCSS()
    {
        $tmp = preg_match_all('/(href=")(\w.*\.css)"/i', $this->url, $patterns);
        $result = array();
        array_push($result, $patterns[2]);
        array_push($result, count($patterns[2]));
        return $result;
    }

    public function getIds()
    {
        $tmp = preg_match_all('/(id="(\w*)")/is', $this->url, $patterns);
        $result = array();
        array_push($result, $patterns[2]);
        array_push($result, count($patterns[2]));
        return $result;
    }

    public function getClasses()
    {
        $tmp = preg_match_all('/(class="(\w*)")/is', $this->url, $patterns);
        $result = array();
        array_push($result, $patterns[2]);
        array_push($result, count($patterns[2]));
        return $result;
    }

    public function getSpans(){
        $tmp = preg_match_all('/(<span>)(.*)(<\/span>)/', $this->url, $patterns);
        $result = array();
        array_push($result, $patterns[2]);
        array_push($result, count($patterns[2]));
        return $result;
    }

}
?>


  Сведения об ответе

darknet

04:50, 14th August, 2020

file_get_contents() может взять удаленный URL и дать вам источник. Затем вы можете использовать регулярные выражения (с Perl-совместимыми функциями), чтобы захватить то, что вам нужно.

Из любопытства, что ты пытаешься наскрести?


  Сведения об ответе

прога

03:07, 21st August, 2020

Я бы использовал либо libcurl, либо Perl LWP (libwww для perl). Есть ли libwww для php?


  Сведения об ответе

JUST___

04:09, 13th August, 2020

Библиотека curl позволяет загружать веб-страницы. Вы должны смотреть в регулярные выражения для выполнения выскабливания.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться