近日,在项目中需要对某著名教务系统进行数据爬取与分析,遂用 phpQuery 结合 curl 来写爬虫,对部分中文页面进行爬取得时候,出现了空白的现象,具体表现为 curl 请求正常,返回结果正常,但在执行 phpQuery::newDocumentHTML 后,无法通过 $value->html() 取到数据,解决方案如下:
$doc = phpQuery::newDocumentHTML(str_replace("gb2312", "utf-8",$curl_Result)); phpQuery::selectDocument($doc);
原因:很有可能被抓取的网页是 utf-8 编码的,但却有 标记,而 phpQuery 是以 meta 标记来分辨字符集的。
如果上诉方法无法解决的话,不如试试直接把网页内容转为 UTF-8 再行元素抓取
$doc = phpQuery::newDocumentHTML(iconv('gb2312','utf-8',$curl_Result)); phpQuery::selectDocument($doc);
若中文出现乱码,则考虑字符编码问题,可以通过如下代码进行转换:
$t = mb_convert_encoding($t,'ISO-8859-1','utf-8');
原因:phpQuery认不清目标网页是什么编码,即找不到meta属性的时候,会默认转换成iso-8859-1的格式。