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

不言
풀어 주다: 2023-04-03 08:58:01
원래의
6695명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿