Heim > Artikel > Backend-Entwicklung > Wie PHP die Funktion zum Crawlen von Webseiten implementiert
Dieser Artikel zeigt Ihnen, wie PHP die Funktion zum Crawlen von Webseiten implementiert. Der Inhalt ist sehr gut. Ich hoffe, er kann allen helfen.
Der Hauptprozess besteht darin, die gesamte Webseite abzurufen und sie dann mit regulären Ausdrücken (Schlüssel) abzugleichen.
Die wichtigsten Methoden zum Crawlen von PHP-Seiten sind mehrere Methoden, die auf den Erfahrungen von Online-Senioren basieren, aber noch nicht verwendet werden. Speichern Sie sie also und probieren Sie sie später aus.
1.file()-Funktion
2.file_get_contents()-Funktion
3.fopen()->fread()->fclose()-Modus
4.curl-Methode (ich verwende diese hauptsächlich)
5.fsockopen()-Funktions-Socket-Modus
6 /projects/ snoopy/)
7.file()-Funktion
<?php //定义url $url='[http://t.qq.com](http://t.qq.com/)';//fiel函数读取内容数组 $lines_array=file($url);//拆分数组为字符串 $lines_string=implode('',$lines_array);//输出内容 echo $lines_string;
2. Verwenden Sie zur Implementierung die Methode file_get_contents, die relativ einfach ist .
Verwenden Sie file_get_contents und fopen, um „allow_url_fopen“ zu aktivieren. Methode: Bearbeiten Sie php.ini und setzen Sie „allow_url_fopen = On“. Wenn „allow_url_fopen“ deaktiviert ist, können weder fopen noch file_get_contents Remote-Dateien öffnen.
$url="[http://news.sina.com.cn/c/nd/2016-10-23/doc-ifxwztru6951143.shtml](http://news.sina.com.cn/c/nd/2016-10-23/doc-ifxwztru6951143.shtml)"; $html=file_get_contents($url); //如果出现中文乱码使用下面代码` //$getcontent = iconv("gb2312", "utf-8",$html); echo"<textarea style='width:800px;height:600px;'>".$html."</textarea>";
3.fopen()->fread()->fclose() Modus habe ich noch nicht verwendet unten, wenn ich es sehe.
<?php //定义url $url='[http://t.qq.com](http://t.qq.com/)';//fopen以二进制方式打开 $handle=fopen($url,"rb");//变量初始化 $lines_string="";//循环读取数据 do{ $data=fread($handle,1024); if(strlen($data)==0) {` break; } $lines_string.=$data; }while(true);//关闭fopen句柄,释放资源 fclose($handle);//输出内容 echo $lines_string;
4. Verwenden Sie Curl zum Implementieren (normalerweise verwende ich dies).
Die Verwendung von Curl erfordert Platz, um Curl zu aktivieren. Methode: Ändern Sie php.ini unter Windows, entfernen Sie das Semikolon vor extension=php_curl.dll und kopieren Sie ssleay32.dll und libeay32.dll nach C:WINDOWSsystem32; installieren Sie die Curl-Erweiterung unter Linux.
<?php header("Content-Type: text/html;charset=utf-8"); date_default_timezone_set('PRC'); $url = "https://***********ycare";//要爬取的网址 $res = curl_get_contents($url);//curl封装方法 preg_match_all('/<script>(.*?)<\/script>/',$res,$arr_all);//这个网页中数据通过js包过来,所以直接抓js就可以 preg_match_all('/"id"\:"(.*?)",/',$arr_all[1][1],$arr1);//从js块中匹配要的数据 $list = array_unique($arr1[1]);//(可省)保证不重复 //以下则是同理,循环则可 for($i=0;$i<=6;$i=$i+2){ $detail_url = 'ht*****em/'.$list[$i]; $detail_res = curl_get_contents($detail_url); preg_match_all('/<script>(.*?)<\/script>/',$detail_res,$arr_detail); preg_match('/"desc"\:"(.*?)",/',$arr_detail[1][1],$arr_content); *** *** *** $ret=curl_post('http://**********cms.php',$result);//此脚本未放在服务器上,原因大家懂就好哈。 } function curl_get_contents($url,$cookie='',$referer='',$timeout=300,$ishead=0) { $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER,1); curl_setopt($curl, CURLOPT_FOLLOWLOCATION,1); curl_setopt($curl, CURLOPT_URL,$url); curl_setopt($curl, CURLOPT_TIMEOUT,$timeout); curl_setopt($curl, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'); if($cookie) { curl_setopt( $curl, CURLOPT_COOKIE,$cookie); } if($referer) { curl_setopt ($curl,CURLOPT_REFERER,$referer); } $ssl = substr($url, 0, 8) == "https://" ? TRUE : FALSE; if ($ssl) { curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); } $res = curl_exec($curl); return $res; curl_close($curl); } //curl post数据到服务器 function curl_post($url,$data){ $ch = curl_init(); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //curl_setopt($ch,CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_POST,true); curl_setopt($ch,CURLOPT_POSTFIELDS,$data); $output = curl_exec($ch); curl_close($ch); return $output; } ?>
5.fsockopen()-Funktions-Socket-Modus (habe es noch nicht verwendet, Sie können es in Zukunft ausprobieren)
Ob Kann der Socket-Modus auch korrekt ausgeführt werden? Es wird empfohlen, dass Sie über phpinfo überprüfen, welche Kommunikationsprotokolle auf dem Server aktiviert sind Verwenden Sie
, um Snoopy zu verwenden, das im Internet sehr beliebt ist. Dies ist ein sehr leistungsstarkes Sammlungs-Plug-In, das sehr bequem zu verwenden ist. Sie können auch einen Agenten zum Simulieren einrichten Browserinformationen.
Hinweis: Das Festlegen des Agenten erfolgt in Zeile 45 der Datei Snoopy.class.php. Suchen Sie in der Datei nach „var formel input error_SERVER[‘HTTP_USER_AGENT‘];‘, um die Browserinformationen zu erhalten. Kopieren Sie einfach die
<?php $fp = fsockopen("t.qq.com", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { $out = "GET / HTTP/1.1\r\n"; $out .= "Host: t.qq.com\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp); }
Verwandte Empfehlungen:
Generatoren und Coroutinen in PHP?Wie implementiert PHP das Hochladen einzelner Dateien und mehrerer Dateien? Und wie implementiert man das Hochladen von Dateien durch Kapselung und objektorientiert?
Das obige ist der detaillierte Inhalt vonWie PHP die Funktion zum Crawlen von Webseiten implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!