PhpQuery странно себя ведет?

Пытаюсь парсить страницу хабра habrahabr.ru/company/genue/blog/210610 с помощью phpQuery.

Код такой:
$url = 'http://habrahabr.ru/company/genue/blog/210610/';
 $html = file_get_contents($url);
 $doc = phpQuery::newDocument($html);
 echo $doc;


Но на выходе получаю лишь такой кусок страницы cMfvV3fR.png

Если парсить какой то конкретный div, например со статьей - то все будет норм. Весь же документ парситься не хочет.

Зачем мне все это:
Стоит задача парсить любую страничку, вставлять в разметку определенный тег и сохранять разметку в базу. PhpQuery легко манипулирует разметкой, но вот с парсингом получился косяк((
  • Вопрос задан
  • 4810 просмотров
Решения вопроса 1
@Insayt Автор вопроса
В общем вопрос решен.
Видимо phpQuery обламывается на большом кол-ве дом узлов, поэтому сделал так:
1.) Парсим содержимое head у вражеского сайта
2.) В моем случае - добавляем нужный тег в head
3.) Хитрой регуляркой (украденой из забугорных интернетов) получаем содержимое body
4.) Склеиваем и выводим

В итоге имеем что то такое
$url = 'http://habrahabr.ru/company/genue/blog/210610/';
$html = file_get_contents($url);
$doc = phpQuery::newDocumentHTML($html);
$doc['head']->prepend('<base href="'.$url.'" target="_blank"></base>');

preg_match("/<body[^>]*>(.*?)<\/body>/is", $html, $matches);

$new = '<html><head>'.$doc['head'].'</head><body>'.$matches[1].'</body></html>';

echo $new;
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@Nc_Soft
<?php
include 'phpQuery.php';
$url = 'http://habrahabr.ru/company/genue/blog/210610/';
$html = file_get_contents($url);
$doc = phpQuery::newDocument($html);
echo pq('html')->html();
Ответ написан
Комментировать
@zzzmaikzzz
Junior-web
Добавь еще - phpQuery::unloadDocuments();
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
проверьте что возвращает file_get_contents, возможно проблема на этом этапе.
Ответ написан
@Nc_Soft
Еще вариантик
<?php
include 'phpQuery.php';
$url = 'http://habrahabr.ru/company/genue/blog/210610/';
$html = file_get_contents($url);
$doc = phpQuery::newDocument($html);
echo (string)$doc;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы