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