Учусь парсить нужны советы

R
На сайте с 01.04.2013
Offline
73
#31

В цикле обходите родительский элемент DOM. А уже внутри цикла ищите картинку и название.

Gerga
На сайте с 02.08.2015
Offline
94
#32

Dram, два цикла можно избежать, если получить продукты по обвертке, а затем уже в цикле искать название и картинку. Нечто подобное должно получиться:


$products = $pq->find('.product');

foreach ($products as $product) {
if ($title = $product->find('.product-card__title')) {
// тут действия на вывод title
}

if ($img = $product->find('img')) {
// тут действия на вывод src
}
}
D
На сайте с 28.06.2008
Offline
1101
#33

Получил все названия и только 1 картинку (самая первая)

где ошибся?

foreach ($elem as $product) {
$pqLink = pq($product);
$title = $pqLink->find('.product-card__title');
$kartinka = $pqLink->find('.product-card-media__element');
$img = $kartinka->attr('src');
echo "<h1>".$title ."</h1>". "<br>";
echo "<img src=".$img.">". "<br>";
}

Но тут вывод, насколько я понимаю опять такой же - сначала все названия, только потом картинки. Да от двух циклов ушли но как сделать вывод - название / картинка?

D
На сайте с 28.06.2008
Offline
1101
#34

Вчерашнюю задачку решил - вытащив названия пицц из alt картинок.

Перешел к следующей задачи и опять застрял - кодировка сайта

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

Сначала пробовал менять тут

$pq = phpQuery::newDocument($pars);

на

$pq = phpQuery::newDocument($pars . 'utf-8');
или
$pq = phpQuery::newDocument('<meta charset="utf-8">' .$pars);

Перепробовал все виды сочетаний кодировок - победить не удалось.

Затем думаю подняться на уровень выше и менять кодировку в curl

Изменил

$result = curl_exec($curl);

на

$result = iconv('CP1251', 'UTF-8', curl_exec($curl));

и в результате получаю пустоту при запросе. Почему?

---------- Добавлено 25.05.2019 в 11:57 ----------

Еще попробовал $result = utf8_decode(curl_exec($curl));

была строка

<th dir="LTR" class="style1" style="width: 118px">�����</th>

стала

<th dir="LTR" class="style1" style="width: 118px">?????</th>

---------- Добавлено 25.05.2019 в 12:08 ----------

curl_setopt($curl, CURLOPT_ENCODING ,"UTF-8");

или

curl_setopt($curl, CURLOPT_ENCODING ,"");

вообще не оказывают никакого влияния

S
На сайте с 30.09.2016
Offline
469
#35
Dram:
Вчерашнюю задачку решил - вытащив названия пицц из alt картинок.

В процессе обучения нужно решать поставленные задачи, а не изобретать хаки.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
D
На сайте с 28.06.2008
Offline
1101
#36

Задачу я решил, это моя была инициатива вывести красиво :)) По кодировке не подскажите?

S
На сайте с 30.09.2016
Offline
469
#37
Dram:
застрял - кодировка сайта

Так вроде раньше всё нормально было, судя по стартпосту. Что изменилось?

D
На сайте с 28.06.2008
Offline
1101
#38

Раньше был новые современные сайты, а этот старый динозавр в кодировке 1251

---------- Добавлено 25.05.2019 в 12:28 ----------

$links = 'http://hramy.ru/regions/city_abc.htm';

$pars = getPageByUrl ($links);

//$pars = iconv('CP1251','UTF-8',$pars);

require_once 'C:\OSPanel\domains\localhost\phpQuery.php';

$pq = phpQuery::newDocument($pars);

$elem = $pq->find('#table2');

$text = $elem->html();

S
На сайте с 30.09.2016
Offline
469
#39
Dram:
Задачу я решил, это моя была инициатива вывести красиво

Значит, не решил. Брать из альтов - это не решение. Подсказки как решить были правильные, просто где-то накосячил.

D
На сайте с 28.06.2008
Offline
1101
#40

Леня подсказал решение вопроса

$text = $elem->html();

$text = iconv('CP1251','UTF-8',$text);

var_dump($text);

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий