前段时间通过QueryList抓取最新省市区地址信息的时候,出现了两个问题:
1、目标页面是GB2312编码的,我存的数据库是UTF-8编码的,在中文转码的时候,发现如果中文太复杂,抓取内容会被抛弃而导致内容抓取不全,获取的数据丢失;
2、一次抓取所有页面内容的时候,有时候程序会突然中断掉,嵌套页面抓取失败;
首先介绍一下什么是QueryList,QueryList是一个基于phpQuery的采集工具。QueryList具有jQuery一样的DOM操作能力、Http网络操作能力、乱码解决能力、内容过滤能力以及可扩展能力;可以轻松实现诸如:模拟登陆、伪造浏览器、HTTP代理等意复杂的网络请求;拥有丰富的插件,支持多线程采集以及使用PhantomJS采集JavaScript动态渲染的页面。
问题1:
用queryList抓取页面的时候,发现不同编码转换的时候,遇到复杂的中文,直接会把从复杂字开始的后面内容全部抛弃掉,比如:我要抓取的是省市区列表,在列表中遇到复杂中文的时候,从当前这条开始到后面的记录就全部丢失掉了;于是便去queryList源码查找原因。
// QueryList.php
public static function Query($page,array $rules, $range = '', $outputEncoding = null, $inputEncoding = null,$removeHead = false)
{
return self::getInstance()->_query($page, $rules, $range, $outputEncoding, $inputEncoding,$removeHead