php抓取网页连接函数( HttpClient类实现了3个方法,一个用于普通的get请求)

优采云 发布时间: 2022-03-17 14:27

  php抓取网页连接函数(

HttpClient类实现了3个方法,一个用于普通的get请求)

  我承认有很多很好的实现,但是自己还是使用Curl实现了一个简单的页面抓取类,主要用到了Curl 和 simple_html_dom, 直接上代码:

  class HttpClient {

private $cookiePath = "d:/my.cookie";

/**

* HTTP GET

* @param unknown $url

* @return mixed

*/

public function request($url) {

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookiePath);

curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookiePath);

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);

curl_close($ch);

return $result;

}

/**

* download file

* @param unknown $url

* @param unknown $target

* @return boolean

*/

public function download($url, $target) {

$ch = curl_init ();

curl_setopt ( $ch, CURLOPT_CUSTOMREQUEST, 'GET' );

curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false );

curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookiePath);

curl_setopt ( $ch, CURLOPT_URL, $url );

ob_start ();

curl_exec ( $ch );

$return_content = ob_get_contents ();

ob_end_clean ();

$return_code = curl_getinfo ( $ch, CURLINFO_HTTP_CODE );

$filename = $target;

unlink($filename);

$fp= @fopen($filename,"a"); //将文件绑定到流 

fwrite($fp,$return_content); //写入文件

return true;

}

/**

* post data to remote url

* @param unknown $url

* @param unknown $params

* @return mixed

*/

public function post($url, $params) {

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_HEADER, false);

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookiePath);

curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookiePath);

$result=curl_exec($ch);

curl_close($ch);

return $result;

}

}

  HttpClient类实现了三种方法,一种是普通的get请求,一种是下载文件,一种是POST数据,比如提交登录表单,因为保存了cookie信息,所以基本可以模拟浏览浏览器的一些操作设备。

  simple_html_dom是一个解析HTML的简单实现,类似于jquery或者Css选择器获取HTML文件中的内容,很简单:

   $client = new HttpClient();

$url ='http://www.sample.com/list.do';

$result = $client->request($url);

$dom = str_get_html($result);

$titles = array();

$records = array();

foreach($dom->find("table.ti_b th") as $th) {

//var_dump($th);

if($th) {

$titles[] = $th->innertext;

}

}

foreach($dom->find("table.ti_b td") as $td) {

if($td) {

$records[] = $td->innertext;

}

}

  使用 str_get_html() 从 HTML 字符串创建 dom 对象。当然,你也可以使用 simple_html_dom 中的 file_get_html() 从 URL 或文件中获取 dom 对象。使用dom对象,可以像jquery一样读取标签数据。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线