English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Esempio di implementazione di un programma di ladro in PHP

为什么使用“小偷程序”?

远程抓取文章资讯或商品信息是许多企业要求程序员实现的功能,也就是俗称的小偷程序。其最主要的优点是:解决了公司网编繁重的工作,大大提高了效率。只需要一运行就能快速地抓取他人网站的信息。

“小偷程序”在哪里运行?

“小偷程序”应在Windows下的DOS或Linux下通过PHP命令运行最佳,因为,网页运行会超时。

比如图(以Windows下的DOS为例):

“小偷程序”的实现

这里主要通过一个实例来讲解,我们来抓取下“华强电子网”的资讯信息,请先看观察这个链接 http://www.hqew.com/info-c10.html,当您打开这个页面时,会发现一些现象:

 1、资讯列表有500页(2012-01-03);

 2、每页的URL链接都有规律,比如:第1页为http://www.hqew.com/info-c10-1.html;第2页为http://www.hqew.com/info-c10-2.html;……第500页为http://www.hqew.com/info-c10-500.html;

3、从第二点可以知道,“华强电子网”的信息是伪静态或生成的静态页面

In realtà, la maggior parte dei siti web ha questa regola, ad esempio:中关村在线、慧聪网、新浪、淘宝……。

In questo modo, possiamo realizzare l'estrazione del contenuto della pagina attraverso questo pensiero:
1、Ottieni il contenuto della pagina della lista degli articoli;
2、Ottieni l'indirizzo URL dell'articolo in circolazione in base al contenuto della pagina della lista degli articoli;
3、Ottieni il contenuto dettagliato dell'articolo in base all'indirizzo URL dell'articolo

Qui, estraiamo principalmente le informazioni dalle pagine delle notizie: titolo (title), data di pubblicazione (date), autore (author), origine (source), contenuto (content)

Estrazione delle informazioni dal sito web '华强电子网'.

Prima di tutto, creiamo la struttura della tabella, come segue:

CREATE TABLE `article`.`article` ( 
`id` MEDIUMINT( 8 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`title` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , 
`date` VARCHAR( 50 ) NOT NULL , 
`author` VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , 
`source` VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , 
`content` TEXT NOT NULL 
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci; 

 Programma di estrazione:
 

<?php 
/** 
* Estrazione delle informazioni dal sito web '华强电子网'. 
* autore Lee. 
* Ultima modifica $Date: 2012-1-3 15:39:35 $ 
*/ 
header('Content-Type:text/html;Charset=utf-8'); 
$mysqli = new mysqli('localhost', 'root', '1715544', 'article'); # Connessione al database, modificare manualmente le informazioni del proprio database 
$mysqli->set_charset('UTF8'); # Imposta la codifica del database 
function data($url) { 
  global $mysqli; 
  $result = file_get_contents($url); # $result 获取 url 链接内容(注意:这里是文章列表链接) 
  $pattern = '/<li><span class="box_r">.+<\/span><a href="([^"]+)" title="[#1#]" >.+<\/a><\/li>/Usi'; # 获取文章 url 的匹配正则表达式 
  preg_match_all($pattern, $result, $arr); # 将文章列表 url 分配给数组 $arr (二维数组) 
  foreach ($arr[1] as $val) { 
    $val = 'http://www.hqew.com' . $val; # 真实的文章 url 地址 
    $re = file_get_contents($val); # $re 为文章 url 的内容 
    $pa = '/<div id="article">\s+<h1>(.+)<\/h1>\s+<p id="article_extinfo">\s+发布:\s+(.+)\s+\|\s+作者:\s+(.+)\s+\|\s+来源:\s+(.*?)\s+<span style="display:none" >.+<div id="article_body">\s*(.+)\s+<\/div>\s+<\/div><!--article end-->/Usi'; # 获取文章内容的正则表达式 
    preg_match_all($pa, $re, $array); # 分配获取的内容到数组 $array 
    $content = trim($array[5][0]);  
    $con = array; 
        'title' => mysqlString($array[1][0]), 
        'date' => mysqlString($array[2][0]),  
        'author' => mysqlString(stripAuthorTag($array[3][0])), 
        'source' => mysqlString($array[4][0]),  
        'content' => mysqlString(stripContentTag($content)) 
      );}} 
    $sql = "INSERT INTO article(title,date,author,source,content) VALUES ('{$con['title']}','{$con['date']}','{$con['author']}','{$con['source']}','{$con['content']}')"; 
    $row = $mysqli->query($sql); # Aggiungi al database 
    if ($row) { 
      echo 'add success!'; 
    } else { 
      echo 'add failed!'; 
    } 
  } 
} 
/** 
 * stripOfficeTag($v) Filtra il contenuto dell'articolo, ad esempio: rimuovi i collegamenti, filtra i tag HTML inutili... 
 * @param string $v 
 * @return string 
 */ 
function stripContentTag($v){ 
  $v = str_replace('<p> </p>', '', $v); 
  $v = str_replace('<p />', '', $v); 
  $v = preg_replace('/<a href=".+" target="\_blank"><strong>(.+)<\/strong><\/a>/Usi', '\1', $v); 
  $v = preg_replace('%(<span\s*[^>]*>(.*)</span>)%Usi', '\2', $v); 
  $v = preg_replace('%(\s+class="Mso[^"]+")%si', '', $v); 
  $v = preg_replace('%( style="[^"]*mso[^>]*)%si', '', $v); 
  $v = preg_replace('/<b><\/b>/', '', $v); 
  return $v; 
} 
/** 
 * stripTitleTag($title) Filtra il titolo dell'articolo 
 * @param string $v 
 * @return string 
 */ 
function stripAuthorTag($v) { 
  $v = preg_replace('/<a href=".+" target="\_blank">(.+)<\/a>/Usi', '\1', $v); 
  return $v; 
} 
/** 
 * mysqlString($str) Filtra i dati 
 * @param string $str 
 * @return string 
 */ 
function mysqlString($str) { 
  return addslashes(trim($str)); 
} 
/** 
 * init($min, $max) Metodo di programma di ingresso, inizia dalla pagina $min e termina alla pagina $max 
 * @param int $min Partito da 1 
 * @param int $max 
 * @return string Restituisce l'indirizzo URL 
 */ 
function init($min=1, $max) { 
  for ($i=$min; $i<=$max; $i++) { 
    data("http://www.hqew.com/info-c10-{$i}.html"); 
  } 
} 
init(1, 500); // Punto di ingresso del programma, inizia dalla prima pagina e cattura fino a 500 pagine 
?> 

Tramite il programma sopra, è possibile implementare la cattura delle informazioni delle notizie di Huaqiangdianzi.net.

Metodo di ingresso init($min, $max) Se si desidera catturare il contenuto delle pagine 1-500, è sufficiente init(1, 500)!In questo modo, non ci vorrà molto tempo prima che tutte le informazioni di Huaqiangdianzi.net siano catturate nel database. ^_^

Interfaccia di esecuzione:

Database:

Dichiarazione: il contenuto di questo articolo è stato prelevato da Internet, il copyright è della proprietà del rispettivo proprietario, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, il sito web non detiene i diritti di proprietà, non è stato editato manualmente e non assume responsabilità per le relative responsabilità legali. Se trovi contenuti sospetti di violazione del copyright, è gradito inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, il sito web eliminerà immediatamente i contenuti sospetti di violazione del copyright.

Ti potrebbe interessare