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

1 234 5
Samail
На сайте с 10.05.2007
Offline
361
#21
Dram:
я в упор не вижу где цикл повторяется.

Так там 2 цикла вообще.

foreach ($links as $item){

for ($i>1;$i<=count($links);$i++){

Зачем второй и почему preg_match_all, а не preg_match в данном случае. И раз уж preg_match_all то почему во втором цикле ты ориентируешься на количество ссылок, а не на количество совпадений.

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

Потому что я знаю что в каждой ссылке по 1 совпадению. ФОР переписал на ИФ - ничего не изменилось

и повторюсь - если вместо $db->query выведу запрос через echo - он выводиться 5 раз. От чего же в базу пишется два раза по 5 ?

---------- Добавлено 20.05.2019 в 18:43 ----------

Проблему с тем что в базу пишет два раза по 5 решил - нужно было добавить первичный ключ на поле ID

Осталось понять почему вместо данных пишется Array

Samail
На сайте с 10.05.2007
Offline
361
#23
Dram:
Проблему с тем что в базу пишет два раза по 5 решил - нужно было добавить первичный ключ на поле ID

Теперь просто второй раз не пишет с тем-же ID а количество запросов от этого не поменялось

Dram:
Осталось понять почему вместо данных пишется Array

Так попробуй

$db->query("INSERT INTO `page` (`id`, `name`, `h1`, `text`) VALUES ($i, '{$title[0][1]}', '{$name[0][1]}', '{$text[0][4]}');")

только то, что раньше в БД добавил стирать не забывай

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

АХАХА решил вопрос!!!!!!!!!!! ЭТО ПИ***Ц

4 часа млять потратил - а дело в кавычках!!!!!!!

вот так нужно переменную записывать в запрос '".$text[0][2]."'

двойные кавычки внутри одинарных

S
На сайте с 30.09.2016
Offline
469
#25
Dram:
двойные кавычки внутри одинарных

одинарные внутри двойных.

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

Samail, спс - решение с фигурными скобками лучше, меньше путаницы с кавычками!

edogs software
На сайте с 15.12.2005
Offline
775
#27

Dram,

Остановитесь на минутку.

Погуглите sql иньекции и зачем нужно экранирование.

Не забывайте устанавливать кодировку после соединения с базой и выясните зачем это надо.

Используйте или https://www.php.net/manual/ru/mysqli.real-escape-string.php экранирование или плейсхолдеры https://www.php.net/manual/ru/mysqli.prepare.php , второе более модно.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
VR
На сайте с 21.05.2019
Offline
0
#28
Dram:
Итак регулярки начал понимать значительно лучше, перешел к curl
Делаю домашнее задание.
Есть 5 ссылок, нужно пройтись по ним курлом, вытащить title, h1 и текст и записать это в базу.
Вот наваял я код и не погу догнать два момента:
1. Какого лешего в базу пишется Array[1] вместо данных
2. Какого пишется два раза, я в упор не вижу где цикл повторяется. Вот что в базе:




если вместо $db->query выведу запрос через echo - он выводиться 5 раз. От чего же в базу пишется два раза по 5 ?

Кодить на столько тяжело на сколько выглядит?

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

Продолжаю изучать phpQuery и запнулся вот о что... нужно найти все ссылки с нужным классом.

Как искать по отдельности или класс или ссылку, я знаю, а как все вместе?

пробую так, но явно где-то ошибка

$pq = phpQuery::newDocument($pars);
$elem = $pq->find('a')->find('.www')->html();
var_dump($elem);



---------- Добавлено 21.05.2019 в 17:15 ----------

Ларчик просто открывался :))) $elem = $pq->find('a.www')->html();

---------- Добавлено 21.05.2019 в 17:28 ----------

Еще непонятка: так все нормально

$pq = phpQuery::newDocument($pars);
$elem = $pq->find('.pag a');
$text = $elem->html();
foreach ($elem as $item) {
$pqLink = pq($item);
echo $pqLink .'<br>';
}

Так ошибка цикла - почему? Warning: Invalid argument supplied for foreach()

$pq = phpQuery::newDocument($pars);
$elem = $pq->find('.pag a')->html();
foreach ($elem as $item) {
$pqLink = pq($item);
echo $pqLink .'<br>';
}
D
На сайте с 28.06.2008
Offline
1101
#30

Дошел до парсинга реальных сайтов 😎

задача - получить названия и картинки пицц. Вот сваял я код, все получил.

$links = 'https://dominos.by/Pizza/';
$pars = getPageByUrl ($links);
require_once 'C:\OSPanel\domains\localhost\phpQuery.php';
$pq = phpQuery::newDocument($pars);
$elem = $pq->find('span')->remove();
$elem = $pq->find('.product-card__title');
$kartinka = $pq->find('.product-card-media__element');
$text = $elem->html();
//var_dump($text);


foreach ($elem as $pizza) {
$pqLink = pq($pizza);
echo $pqLink . "<br>";
}

foreach ($kartinka as $item) {
$src = pq($item);
$img = $src->attr('src');
echo $img . "<br>";
}

И захотелось мне вывести красиво :

Название - картинка
Название - картинка

и вот тут я застрял на 2 часа :))) как можно совместить два цикла?

1 234 5

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