2010-11-16 3 views
0

Я только начал изучать программирование около 6 месяцев назад, и я действительно погружался глубоко в Objective-C. К сожалению, я не знаю программистов IRL, чтобы отбросить общие вопросы.Общий интернет-вопрос «соскабливания»

Какие языки используются, когда люди пишут программы, которые будут искать на сайте информацию, а затем отправить ее обратно? Например, если бы я хотел написать программу, которая будет искать weather.com для ежедневной температуры за последние 30 дней в определенном месте, а затем отправить ее обратно, как сказать ... NSArray или NSDictionary, как бы я это сделал? Могу ли я сделать это в Objective C или это супер-продвинутый язык скриптового языка? Если я смогу сделать это в Objective-C, может ли кто-нибудь ссылку на учебник или место, которое может заставить меня начать изучать этот тип материала? (Я действительно не знаю термин для такого типа программирования, поэтому мои поисковые запросы Google были бесплодными.)

ответ

1

Я обычно использую PHP и MySQL с CURL

http://en.wikipedia.org/wiki/CURL

Вы можете сделать некоторые забавные вещи, как Search Engine Результатов Страницы запросы и т.д.

Вот источник из гусеничного я использую , Я выделил некоторые части для анонимности, но это хороший почти рабочий пример. Я могу помочь вам запустить его в случае необходимости.

<?php 
class Crawler { 

    protected $markup = ''; 
    protected $uri = ''; 

    protected $db_location = "localhost"; 
    protected $db_username = "***"; 
    protected $db_password = "***"; 
    protected $db_name = "***"; 

    public function __construct() { 
    ini_set('memory_limit', -1); 
    } 

    public function getMarkup() { 
    $markup = ""; 
    $markup = @file_get_contents($this->uri); 
    return $markup; 
    } 

    public function get($type) { 
    $method = "_get_{$type}"; 
    if (method_exists($this, $method)){ 
     return call_user_method($method, $this); 
    } 
    } 

    protected function db_query($query) { 
    $connection = mysql_connect($this->db_location,$this->db_username,$this->db_password) or die(mysql_error()); 
    mysql_select_db($this->db_name,$connection) or die(mysql_error()." >> ".$query); 

    //echo $query."<br/>"; //for debugging 

    $result = mysql_query($query,$connection) or die (mysql_error()." >> ".$query); 


    $i = 0; 

    if($result != 1) 
     { 
      while ($data_array = mysql_fetch_array($result)) 
       { 
        foreach($data_array as $key => $value) 
         { 
          $tableArray[$i][$key] = stripslashes($data_array[$key]); 
         } 

        $i++; 
       } 

      return $tableArray; 
     } 
    } 

    protected function db_insert($table,$array) { 
     $tableArray = $this->db_query("show columns from ".$table); 

     $inputString = ""; 

     foreach($tableArray as $key => $value) 
      { 
       if (array_key_exists($value[0], $array) && $value[0]) { 
        $inputString .= "'".addslashes($array[$value[0]])."', "; 
       } else { 
        $inputString .= "'', "; 
       } 
      } 

     $inputString = substr($inputString, 0, -2); 
     $this->db_query("insert into $table values(".$inputString.")"); 

     return mysql_insert_id(); 
    } 

    protected function _get_data() { 
     //$scrape['id'] = $this->get('id'); 
     $scrape['name'] = $this->get('name'); 
     $scrape['tags'] = $this->get('tags'); 
     $scrape['stat_keys'] = $this->get('stat_keys'); 
     $scrape['stat_values'] = $this->get('stat_values'); 

     foreach($scrape['stat_values'] as $key => $value) { 
      $scrape['stat_values'][$key] = trim($scrape['stat_values'][$key]); 

      if(strpos($value,"<h5>Featured Product</h5>")) { 
       unset($scrape['stat_values'][$key]); 
      } 
      if(strpos($value,"<h5>Featured Company</h5>")) { 
       unset($scrape['stat_values'][$key]); 
      } 
      if(strpos($value,"<h5>Featured Type</h5>")) { 
       unset($scrape['stat_values'][$key]); 
      } 
      if(strpos($value,"sign in")) { 
       unset($scrape['stat_values'][$key]); 
      } 
      if(strpos($value,"/100")) { 
       unset($scrape['stat_values'][$key]); 
      } 
     } 

     if(sizeof($scrape['tags']) > 0 && is_array($scrape['tags'])) { 
      foreach($scrape['tags'] as $tag) { 
       $tag_array[$tag] = $tag_array[$tag] + 1; 
      } 

      $scrape['tags'] = $tag_array; 

      foreach($scrape['tags'] as $key => $tag_count) { 
       $scrape['tags'][$key] = $tag_count - 1; 
      } 
     } 

     $scrape['stat_values'] = array_merge(array(),$scrape['stat_values']); 

     return $scrape; 
    } 

    protected function _get_images() { 
    if (!empty($this->markup)){ 
     preg_match_all('/<img([^>]+)\/>/i', $this->markup, $images);   
     return !empty($images[1]) ? $images[1] : FALSE; 
    } 
    } 

    protected function _get_links() { 
    if (!empty($this->markup)){ 
     preg_match_all('/<a([^>]+)\>(.*?)\<\/a\>/i', $this->markup, $links); 
     return !empty($links[1]) ? $links[1] : FALSE; 
    } 
    } 

    protected function _get_id() { 
    if (!empty($this->markup)){ 
     preg_match_all('/\/wine\/view\/([^`]*?)-/', $this->markup, $links); 
     return !empty($links[1]) ? $links[1] : FALSE; 
    } 
    } 


    protected function _get_grape() { 
    if (!empty($this->markup)){ 
     preg_match_all('/ class="linked" style="font-size: 14px;">([^`]*?)<\/a>/', $this->markup, $links); 
     return !empty($links[1]) ? $links[1] : FALSE; 
    } 
    } 
} 

if($_GET['pass'] == "go") { 
    $crawl = new Crawler(); 
    $crawl->go(); 
} 
?> 
0

Итак, вы хотите знать, как писать код на стороне сервера? Ну, теоретически вы можете написать, что бы вы ни хотели. Я также заверяю вас, что это не «супер-продвинутый».

Возможно, вам будет легко начать с PHP. У W3schools.com есть fine tutorial.

0

Что вы описываете, это crawler (например, Google).

Любой язык, который имеет возможность отправлять HTTP-запросы и получать ответы, может сделать это (это большинство языков).

Если вы не хотите кодировать эту штуку с нуля, попробуйте загрузить фреймворк open source crawler, который позволит настраивать плагины для обработки полученного HTML-кода.

Для вашего примера вы скажете сканеру, на каком сайте вы хотите его обходить (т. Е. Ваш метеорологический сайт), при необходимости добавьте ограничения URI и создайте настраиваемый плагин для анализа данных погоды из HTML-кода, который он отвечает , Затем вы можете сохранить эти данные, как вы считаете нужным.

Смежные вопросы