jae-jae / QueryList

:spider: The progressive PHP crawler framework! 优雅的渐进式PHP采集框架。
https://querylist.cc
2.65k stars 440 forks source link

高版本laravel会出现很多莫名其妙的问题 #112

Closed aboutboy closed 4 years ago

aboutboy commented 4 years ago

之前也遇到过一些在高版本laravel上出现一些莫名其妙的结果,还以为自己的代码写得有问题。 今天试了下laravel7,结果遇到更加莫名其妙的问题。获取列表时,如果是href,只能获取到第一条数据。如果有text,可以全部获取到,但是被全部合并成一条数据了。 laravel7框架执行结果: image laravel5.8框架r执行结果: image 后来我只好把代码拷贝到laravel5.8的框架下,执行后得到的数据是正常的。 这个框架其实本来还挺好用的,但是遇到这种问题,心里挺烦的。

用这个框架开发效率还是挺高的。希望作者多多优化。谢谢!

aboutboy commented 4 years ago

好像不是laravel版本的问题。而是querylist版本不一样。我laravel7框架安装的querylist版本是4.2,而laravel5.8里面安装的querylist4.1。

奇怪...

aboutboy commented 4 years ago

好像也不是上面的问题。我刚把laravel7的querylist换成4.1版本,也不行。。 下午刚重新弄了一个laravel5.8的项目,最初里面装了4.2的querylist,发现有问题。现在换成4.1版本的querylist,竟然仍然有问题。。 我就奇怪了,我那个旧的laravel5.8的项目,里面是4.1版本的querylist,就是正常的。。

神奇了。。感觉遇到这种问题,太浪费时间了。

aboutboy commented 4 years ago

奇怪了。我复制官网一段ithome的代码,发现采集是正常的。 http://www.querylist.cc/docs/guide/v4/scraper-list 然后我把这个代码改成我想采集的地址,就出问题了。 代码如下: $url = 'http://www.xigushi.com/ymgs/list_3_1.html'; // 元数据采集规则 $rules = [ 'title' => ['ul > li > a','text'], 'link' => ['ul > li > a','href'], ]; // 切片选择器 $range = 'body > div.index > div.list > dl > dd'; $rt = QueryList::get($url)->rules($rules)->encoding('UTF-8','gb2312')->removeHead()->range($range)->query()->getData();

    print_r($rt->all());
aboutboy commented 4 years ago

奇怪了。我又随便找了一个网站,https://segmentfault.com/t/querylist,获取到的数据仍然是有问题的。。难道我哪里写错了吗? $url = 'https://segmentfault.com/t/querylist'; // 元数据采集规则 $rules = [ 'title' => ['h4>a','text'], 'link' => ['h4>a','href'] ]; // 切片选择器 $range = '.news-list'; $rt = QueryList::get($url); dump($rt); $rt = $rt->rules($rules)->range($range)->query()->getData();

    print_r($rt->all());

image

aboutboy commented 4 years ago

我好像大概明白是为什么了。。 采集列表必须使用range,好吧,去range那里瞅了瞅文档,果然是的。 image 似乎以前就不需要。不然为啥我那个laravel5.8的老项目里面运行是没问题的?

wqjohnston commented 11 months ago

querylist 4.1.1的版本可以