最近在爬虫某个网站,对于精准的class获取元素值某些文章竟然获取失败,例如下面的代码:
// 解析文章内容
$element = QueryList::html($response)->find('.article .content')->eq(0);
$content = $element->html();理论来讲,稳如老狗,事实上并不是,一直怀疑底层Bug,但是懒得看,后来我想了下唯一可能得原因是字符串编码,于是我对response编码转换为utf8编码:
// 网页内容编码转换 $response = convert_char($response);
然而还是部分解析失败,此时我怀疑是底层bug,但是我觉得这么low的bug不应该,大概率是在DOMElement层获取到的字符编码是utf8,但是response的header中有如下代码:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
DOMElement处理dom节点的时候字符串编码和网页编码不一致可能导致匹配不到节点。以前总是遇到这个问题,逃避很多次,这次终于解决了。一定要保证原始DOM编码规范,header头的编码和DOM编码一致即可。替换下字符串:
// Header标签中编码处理
$response = str_replace('gb2312', 'utf-8', $response);PHP YYDS
理解抽象类最快的方法就是使用场景,最近在看布尔PHP视频中看到这样的讲解非常容易懂,分享出来。 假设如下场景: 团队准备开发某网站,表建好了,页面设计好了. ...
<?php echo similar_text("Hello World","Hello Shanghai"); ?> 2.计算两个字符串的相似度,并返回百分比 <?php similar_text("...
001源码:/* * $xml_str是xml字符串 */ function xmltoarray($xml_str) { //禁止XML实体扩展攻击 libxml_disable_entity_loader(true); //拒绝包含...
如果想在windows中执行php,并且让php脚本在后台运行,可以用下面的cmd命令start /b php D:\wwwroot\default\demo1\run.php例如上面的命令意思后台运行run.php,如果想用php编写异步代码: ...
xmlrpc协议是通过http请求xml数据进行通信。webservice中和它相同的是soap。soap调用的确很简单,但是创建wsdl太繁琐,效率低下。xmlrpc很好的解决这个问题。(1).创建xmlrpc服务端(求和函数api)function getSum($method,$ar...
<?php /** * daemonize让当前脚本为守护进程执行 * @param string $callback 匿名函数 */ function daemonize($callback) {...