Существует сайт, каталог. В каталоге есть множество элементов. Ссылка на каждый элемент имеет вид exemple.com/anket/50850
. Нужно получить 50850
.
На одной странице множество ссылок следующего вида:
<a href="/anket/75882?log=1&pos=1&page=1&pagepos=1&pageid=0&city=1" data-href="/anket/75882?log=1&pos=1&page=1&pagepos=1&pageid=0&city=1" onmousedown="this.setAttribute('href', this.getAttribute('data-href'))" class="item"> Код элемента каталога </a>
Получил страницу следующим кодом:
$ch = curl_init();
for ($i=0; $i < 3; $i++) {
curl_setopt($ch, CURLOPT_URL, "https://exemple.com");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
}
curl_close($ch);
DOM храниться в $ch
. В нем же и каталог.
Вытянуть ID пробовал с помощью регулярного выражения (регулярное выражение сформировал с помощью сервиса txt2re.com).
Для формирования кода получения необходимого ID, сначала добавил туда только 1 тег a
, потом попробовал туда добавить 2-ой тег, после этого код вырос и получилось вот что:
$txt='<a href="/anket/50850?log=1&pos=2&page=1&pagepos=2&pageid=0&city=1" data-href="/anket/50850?log=1&pos=2&page=1&pagepos=2&pageid=0&city=1" onmousedown="this.setAttribute(\'href\', this.getAttribute(\'data-href\'))" class="item"> <a href="/anket/75882?log=1&pos=1&page=1&pagepos=1&pageid=0&city=1" data-href="/anket/75882?log=1&pos=1&page=1&pagepos=1&pageid=0&city=1" onmousedown="this.setAttribute(\'href\', this.getAttribute(\'data-href\'))" class="item">';
$re1='.*?'; # Non-greedy match on filler
$re2='(\\d+)'; # Integer Number 1
$re3='.*?'; # Non-greedy match on filler
$re4='\\d+'; # Uninteresting: int
$re5='.*?'; # Non-greedy match on filler
$re6='\\d+'; # Uninteresting: int
$re7='.*?'; # Non-greedy match on filler
$re8='\\d+'; # Uninteresting: int
$re9='.*?'; # Non-greedy match on filler
$re10='\\d+'; # Uninteresting: int
$re11='.*?'; # Non-greedy match on filler
$re12='\\d+'; # Uninteresting: int
$re13='.*?'; # Non-greedy match on filler
$re14='\\d+'; # Uninteresting: int
$re15='.*?'; # Non-greedy match on filler
$re16='\\d+'; # Uninteresting: int
$re17='.*?'; # Non-greedy match on filler
$re18='\\d+'; # Uninteresting: int
$re19='.*?'; # Non-greedy match on filler
$re20='\\d+'; # Uninteresting: int
$re21='.*?'; # Non-greedy match on filler
$re22='\\d+'; # Uninteresting: int
$re23='.*?'; # Non-greedy match on filler
$re24='\\d+'; # Uninteresting: int
$re25='.*?'; # Non-greedy match on filler
$re26='\\d+'; # Uninteresting: int
$re27='.*?'; # Non-greedy match on filler
$re28='\\d+'; # Uninteresting: int
$re29='.*?'; # Non-greedy match on filler
$re30='(\\d+)'; # Integer Number 2
if ($c=preg_match_all ("/".$re1.$re2.$re3.$re4.$re5.$re6.$re7.$re8.$re9.$re10.$re11.$re12.$re13.$re14.$re15.$re16.$re17.$re18.$re19.$re20.$re21.$re22.$re23.$re24.$re25.$re26.$re27.$re28.$re29.$re30."/is", $txt, $matches))
{
$int1=$matches[1][0];
$int2=$matches[2][0];
print "($int1) ($int2) \n";
}
При этом, если увеличивать количество тегов а
, то он и размер кода увеличивает. Что-то вариант совсем непригодный для выполнения моей задачи.
ВОПРОС
Как лучше получить список ID со страницы?
P.S.
Вариант с регулярным выражением <a href="/anket/(\d+)
в reg_match_all()
у меня выдает ошибку.
Код:
preg_match_all ('<a href="/anket/(\d+)', $txt, $matches, PREG_PATTERN_ORDER);
print_r($matches);
Ошибка:
P.S.S.
Испробовал следующий код:
preg_match_all('#<a href="/anket/(\d+)#is', $txt, $matches, PREG_PATTERN_ORDER);
print_r($matches);
Если в переменной $txt передать документ полученный с помощью Curl
, то получаю ошибку:
Warning: preg_match_all() expects parameter 2 to be string, resource given in E:\OSPanel\domains\localhost\index.php on line 34
Виртуальный выделенный сервер (VDS) становится отличным выбором
echo functionname(array("first"=>12,"sec"=>45,"third"=>23,"forth"=>55));
Как получить info hash из торрент файла? Какие данные нужно хешировать? В каком порядке?
Есть два модуля: Application и Blog, в каждом из них есть файл Modulephp со своей логикой