public function test()
{
# file_get_contents 没效果 要用curl-http请求
# $html = file_get_contents('https://news.ke.com/bj/baike/0033/');
$html = $this->http_request('https://news.ke.com/bj/baike/0033/');
$dom = new \DOMDocument();
// 忽略html不严格的格式 - 过滤报错信息
libxml_use_internal_errors(true);
$dom->loadHTML($html);
//halt($dom);
// 转为xpath对象
$xpath = new \DOMXPath($dom);
// 查询路径 #谷歌浏览器右击标签 copy->复制xpath
//$query = '/html/head/title';
# 它会取得所有a标签class为tit LOGCLICK的元素
# $query = '/html/body/div[3]/div[2]/div/div[2]/div[2]//div/a[contains(@class,"tit LOGCLICK")]';
# 或者这样写也可以 同上
$query = '//a[contains(@class,"tit LOGCLICK")]';
// 查询所有的图片 - //img 不管层级查找img @data-original查找所有为data-original属性的图片
// $query = '//img/@data-original';
$noteList = $xpath->query($query);
// 不遍历得到的是一个长度 length
foreach ($noteList as $item){
dump($item); // 这里得到一个对象
}
}
# curl - http请求
function http_request($url,$data = null){
// php curl 发起get或者post请求
// curl 初始化
$curl = curl_init(); // curl 设置
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 校验证书节点
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);// 校验证书主机
// 判断 $data get or post
if ( !empty($data) ) {
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 以文件流的形式 把参数返回进来
// 如果这一行 不写你就收不到 返回值
// 执行
$res = curl_exec($curl);
curl_close($curl);
return $res;
}