php 爬虫 船只博客,使用PHP编写爬虫 - 冯奎博客 — 再牛逼的梦想,也抵不住你傻逼似的坚持。 — Fengkui Blog...

说到爬虫,大家的第一印象就会想到Python,

但是Python并不是所有人都会的,

那么是否可以使用其他的语言来编写爬虫呢?

当然是可以的,下面介绍一下如何使用PHP编写爬虫。

获取页面html内容

1、使用函数 file_get_contents 把整个文件读入一个字符串中。

file_get_contents(path,include_path,context,start,max_length);

file_get_contents('https://fengkui.net/');

这样就可以将整个页面的html内容,读入一个字符串中,然后进行解析了

2、使用CURL进行请求,获取html

/**

* [curlHtml 获取页面信息]

* @param [type] $url [网址]

* @return [type] [description]

*/

function curlHtml($url)

{

$curl = curl_init();

curl_setopt_array($curl, array(

CURLOPT_URL => "{$url}",

CURLOPT_RETURNTRANSFER => true,

CURLOPT_ENCODING => "",

CURLOPT_MAXREDIRS => 10,

CURLOPT_TIMEOUT => 30,

CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,

CURLOPT_CUSTOMREQUEST => "GET",

CURLOPT_HTTPHEADER => array(

"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",

"Accept-Encoding: gzip, deflate, br",

"Accept-Language: zh-CN,zh;q=0.9",

"Cache-Control: no-cache",

"Connection: keep-alive",

"Pragma: no-cache",

"Upgrade-Insecure-Requests: 1",

"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36",

"cache-control: no-cache"

),

));

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

$response = curl_exec($curl);

$err = curl_error($curl);

curl_close($curl);

if ($err) return false;

else return $response;

}

使用Curl我们可以来进行其他操作,如模拟浏览器模拟登陆等一些高级操作。

解析页面HTML,获取所需数据

1、正则获取内容

/**

* [get_tag_data 使用正则获取html内容]

* @param [type] $html [爬取的页面内容]

* @param [type] $tag [要查找的标签]

* @param [type] $attr [要查找的属性名]

* @param [type] $value [属性名对应的值]

* @return [type] [description]

*/

function get_tag_data($html,$tag,$attr,$value){

$regex = "/(.*?)/is";

preg_match_all($regex,$html,$matches,PREG_PATTERN_ORDER);

$data = isset($matches[1][0]) ? $matches[1][0] : '';

return $data;

}

$str = '

冯奎博客
';

$value = get_tag_data($str, 'div', 'class', 'feng');

2、使用Xpath解析数据

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。

具体使用方法及相关介绍查看百度百科(XPath)

使用方法:

/**

* [get_html_data 使用xpath对获取到的html内容进行处理]

* @param [type] $html [爬取的页面内容]

* @param [type] $path [Xpath语句]

* @param integer $tag [类型 0内容 1标签内容 自定义标签]

* @param boolean $type [单个 还是多个(默认单个时输出单个)]

* @return [type] [description]

*/

function get_html_data($html,$path,$tag=1,$type=true)

{

$dom = new \DOMDocument();

@$dom->loadHTML("<?xml encoding='UTF-8'>" . $html); // 从一个字符串加载HTML并设置UTF8编码

$dom->normalize(); // 使该HTML规范化

$xpath = new \DOMXPath($dom); //用DOMXpath加载DOM,用于查询

$contents = $xpath->query($path); // 获取所有内容

$data = [];

foreach ($contents as $value) {

if ($tag==1) {

$data[] = $value->nodeValue; // 获取不带标签内容

} elseif ($tag==2) {

$data[] = $dom->saveHtml($value); // 获取带标签内容

} else {

$data[] = $value->attributes->getNamedItem($tag)->nodeValue; // 获取attr内容

}

}

if (count($data)==1) {

$data = $data[0];

}

return $data;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值