>  기사  >  백엔드 개발  >  PHP를 사용하여 웹페이지를 크롤링하는 방법

PHP를 사용하여 웹페이지를 크롤링하는 방법

不言
不言원래의
2018-07-18 14:40:256697검색

PHP에서 웹페이지 데이터를 크롤링하는 주요 프로세스는 먼저 전체 웹페이지 데이터를 얻은 다음 (중요한) 필수 웹페이지 데이터를 정기적으로 일치시키는 것입니다.

PHP에서 페이지를 읽는 주요 방법. 페이지 데이터를 얻는 방법에 대한 몇 가지 예는 아직 인터넷에서 사용되지 않은 것입니다.

1.file() function

2.file_get_contents() function

3.fopen()->fread()->fclose() mode

4.curl 메소드 (저는 주로 이걸 사용합니다)

5.fsockopen() 함수 소켓 모드

6. 플러그인(예: http://sourceforge.net/projects/snoopy/)

7.file() function

<?php
//定义url
$url=&#39;[http://t.qq.com](http://t.qq.com/)&#39;;//fiel函数读取内容数组
$lines_array=file($url);//拆分数组为字符串
$lines_string=implode(&#39;&#39;,$lines_array);//输出内容
echo $lines_string; 

2. 구현할 file_get_contents 메소드는 비교적 간단합니다.

allow_url_fopen을 활성화하려면 file_get_contents 및 fopen을 사용하세요. 방법: php.ini를 편집하고 Allow_url_fopen = On으로 설정하십시오.allow_url_fopen이 꺼지면 fopen이나 file_get_contents 모두 원격 파일을 열 수 없습니다.

$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=&#39;width:800px;height:600px;&#39;>".$html."</textarea>";

3.fopen()->fread()->fclose() 모드는 아직 써본적이 없어서 적어보겠습니다

<?php
//定义url
$url=&#39;[http://t.qq.com](http://t.qq.com/)&#39;;//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. 구현하려면 컬을 사용하세요(저는 보통 이것을 사용합니다).

curl을 사용하려면 컬을 활성화할 공간이 필요합니다. 방법: Windows에서 php.ini를 수정하고 Extension=php_curl.dll 앞의 세미콜론을 제거한 다음 ssleay32.dll 및 libeay32.dll을 C:WINDOWSsystem32에 복사하여 Linux에서 컬 확장을 설치합니다.

<?php
header("Content-Type: text/html;charset=utf-8");
date_default_timezone_set(&#39;PRC&#39;);
$url = "https://***********ycare";//要爬取的网址
$res = curl_get_contents($url);//curl封装方法
preg_match_all(&#39;/<script>(.*?)<\/script>/&#39;,$res,$arr_all);//这个网页中数据通过js包过来,所以直接抓js就可以
preg_match_all(&#39;/"id"\:"(.*?)",/&#39;,$arr_all[1][1],$arr1);//从js块中匹配要的数据
$list = array_unique($arr1[1]);//(可省)保证不重复
//以下则是同理,循环则可
for($i=0;$i<=6;$i=$i+2){
  $detail_url = &#39;ht*****em/&#39;.$list[$i];
  $detail_res = curl_get_contents($detail_url);
  preg_match_all(&#39;/<script>(.*?)<\/script>/&#39;,$detail_res,$arr_detail);
  preg_match(&#39;/"desc"\:"(.*?)",/&#39;,$arr_detail[1][1],$arr_content);
  ***
    ***
    ***
  $ret=curl_post(&#39;http://**********cms.php&#39;,$result);//此脚本未放在服务器上,原因大家懂就好哈。
}
function curl_get_contents($url,$cookie=&#39;&#39;,$referer=&#39;&#39;,$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,&#39;Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36&#39;);
  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,&#39;Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36&#39;);
  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() 함수 소켓 모드 (이전에 사용해 본 적이 없으며 나중에 사용해 볼 수 있습니다)

소켓 모드가 올바르게 실행될 수 있는지 여부도 서버 설정과 관련이 있습니다. phpinfo 통신 프로토콜

<?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);
}

6.snoopy 플러그인을 통해 서버에서 무엇이 활성화되어 있는지 확인하세요. 최신 버전은 Snoopy-1.2.4.zip입니다. 마지막 업데이트: 2013-05-30, 모두가 사용하는 것이 좋습니다.

인터넷에서 매우 인기 있는 스누피를 사용하여 수집하세요. 이것은 매우 강력한 수집 플러그인이며 사용이 매우 편리하며 여기에 에이전트를 설정하여 브라우저 정보를 시뮬레이션할 수도 있습니다.

참고: 에이전트는 Snoopy.class.php 파일의 45번째 줄에 설정되어 있습니다. 파일에서 "var Formula input error_SERVER['HTTP_USER_AGENT'];를 검색하여 브라우저 정보를 가져오고 내용을 에코하세요. 복사하면 됩니다.

<?php
//引入snoopy的类文件
require(&#39;Snoopy.class.php&#39;);
//初始化snoopy类
$snoopy=new Snoopy;
$url="[http://t.qq.com](http://t.qq.com/)";
//开始采集内容`
$snoopy->fetch($url);
//保存采集内容到$lines_string
$lines_string=$snoopy->results;
//输出内容,嘿嘿,大家也可以保存在自己的服务器上
echo $lines_string;

관련 권장 사항:

웹 크롤링: PHP의 웹 크롤러 방법 요약, 크롤러

php 웹 페이지 분석 콘텐츠 크롤링 크롤러 데이터 분석

위 내용은 PHP를 사용하여 웹페이지를 크롤링하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.