Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите с парсингом сайта
 
 автор: Unreal   (23.07.2008 в 16:35)   письмо автору
 
 

Пробую написать парсер для сайта
беру страницу http://allspo.ru/main/operators/

в коде есть такое место

<a href="/main/detail/operator/?id=2916" onClick="ShowWin('/window/operator/?id=2916',500,400,'_blank','yes');


мне нужно получить все эти id и дальше уже идти по этим ссылкам и оттуда парсить детальную инфу, но пока никак не получается выдернуть этот id

вот мое регулярное выражение
$link_regexp = '<a href="/main/detail/operator/\?id=(.*)" onClick=">';

в питоне пытался так
matches = re.compile("/window/operator/?id=\d+", re.S).search(text)
print matches

тоже не прокатило :(

подскажите как мне выдернуть этот id?

   
 
 автор: BinLaden   (23.07.2008 в 16:40)   письмо автору
 
   для: Unreal   (23.07.2008 в 16:35)
 

В PHP нужны еще органичителя паттерна.

> onClick=">
И почему у Вас так, когда в примере для onClick есть какое-то непустое значение?

   
 
 автор: Unreal   (23.07.2008 в 16:48)   письмо автору
 
   для: BinLaden   (23.07.2008 в 16:40)
 

вот немного переделал, но находит почему то одну ссылку только


<?php

$loaded_extensions 
get_loaded_extensions();
if (!
in_array('curl'$loaded_extensions)) {
  die(
'Curl extension is not in list of loaded extensions, grabber unable to work without it.');
}


$operators_link 'http://allspo.ru/main/operators/';
$proxy_options = array('host' => '192.168.0.1''port' => '8080');


/**
 *  @param  string  $url  Example: http://somehost.com/
 *  @param  mixed $proxy_options  Example: array('host' => '192.168.0.1', 'port' => 8080);
 */
function get_url($url$proxy_options = array()) {
  
$curl_options = array();

  if (
strlen($url) < 4) {
    print 
"\n'$url' is not valid URL. ";
  }

  if (
count($proxy_options) and isset($proxy_options['host']) and isset($proxy_options['port'])) {
    
$curl_options[CURLOPT_PROXY] = $proxy_options['host'] . ':' $proxy_options['port'];
    
$curl_options[CURLOPT_HTTPPROXYTUNNEL] = 1;
  }

  
$curl_options[CURLOPT_RETURNTRANSFER] = 1;
  
$curl_options[CURLOPT_URL] = $url;
  
$curl_options[CURLOPT_USERAGENT] = 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0';
  
$curl_options[CURLOPT_HEADER] = false;

  
$ch curl_init();
  
curl_setopt_array($ch$curl_options);
  
$result curl_exec($ch);
  
curl_close($ch);
  return 
$result;
}

$link_regexp '#<a href="/main/detail/operator/\?id=(.*)" onClick="ShowWin#isU';
$operator_page get_url($operators_link$proxy_options);

preg_match($link_regexp$operator_page$matches);

var_dump($matches);

   
 
 автор: BinLaden   (23.07.2008 в 16:52)   письмо автору
 
   для: Unreal   (23.07.2008 в 16:48)
 

preg_match() ищет только первое совпадение.

Вам нужна функция preg_match_all().

   
 
 автор: Unreal   (23.07.2008 в 16:59)   письмо автору
 
   для: BinLaden   (23.07.2008 в 16:52)
 

спасибо :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования