owner888 / phpspider

《我用爬虫一天时间“偷了”知乎一百万用户,只为证明PHP是世界上最好的语言 》所使用的程序
3.49k stars 1.18k forks source link

a的地址相对路径问题 #111

Closed 838514984 closed 6 years ago

838514984 commented 6 years ago

内容页https://www.aaaaa.com/mei/[a-zA-Z]+/\d+/\d+.html 例如:https://www.aaaaa.com/mei/xinggan/201709/85723.html 页面中的a标签是 "85723_2.html" 最后的地址应该是https://www.aaaaa.com/mei/xinggan/201709/85723_2.html 但是field里,children里提取后最后的地址是https://www.aaaaa.com/mei/xinggan/85723_2.html 中间少了一段,请问有什么简便的方法解决吗 自己想到了一个方法就是下载完这个页面后将每一个a标签地址做修改,这样比较麻烦

children能不能引用其他field的值呢

kingleoric commented 6 years ago

你有试过在on_scan_page、on_list_page、on_cent_page这几个回调函数中处理吗? 修改$page['url']的参数?

838514984 commented 6 years ago

@kingleoric 感觉不可行,$page['url']每一个都是完整的地址,你有什么思路吗,目前解决的办法就是在html内容里插入标签然后再提取

838514984 commented 6 years ago

请问 fill_url 方法中拼接地址 else { $arr = explode("/", $base_url_path); array_pop($arr); $base_url_path = implode("/", $arr); $url = $base_url_path.'/'.$url; } 中的array_pop($arr);作用是什么呢 @owner888

Lawrence666 commented 6 years ago

@838514984 这是php自带函数 百度下就有相关解释

838514984 commented 6 years ago

@Lawrence666 我知道啊,我的意思是作者为什么要这样写额,改了会不会有什么问题,这样的写法最后生成的地址会少一段路径额,我把 $base_url_path = implode("/", $arr); 这行代码注释了,问题解决了,目前好像没有什么问题

owner888 commented 6 years ago

@838514984 请问你在那个网页遇到过哈,正常不会来到这个位置的呀

838514984 commented 6 years ago

还挺多的呦,我已经自己按自己的需求修改了,谢谢回复哈

owner888 commented 6 years ago

@838514984 不好意思,我函数写错了,我原意是要过滤数组空值,把 array_pop($arr) 改为 $arr = array_filter($arr);即可阿,代码我已经提交。