发布网友 发布时间:2022-04-24 11:14
共6个回答
懂视网 时间:2022-04-29 13:53
在swoole中,php可以借助其启动子进程的方式,实现php的多进程:
<?php $s_time = time(); echo '开始时间:'.date('H:i:s',$s_time).PHP_EOL; //进程数 $work_number=6; // $worker=[]; //模拟地址 $curl=[ 'https://blog.csdn.net/feiwutudou', 'https://wiki.swoole.com/wiki/page/215.html', 'http://fanyi.baidu.com/?aldtype=16047#en/zh/manager', 'http://wanguo.net/Salecar/index.html', 'http://o.ngking.com/themes/mskin/login/login.jsp', 'https://blog.csdn.net/marksinoberg/article/details/77816991' ]; //单线程模式 // foreach ($curl as $v) { // echo curldeta($v); // } //创建进程 for ($i=0; $i < $work_number; $i++) { //创建多线程 $pro=new swoole_process(function(swoole_process $work) use($i,$curl){ //获取html文件 $content=curldeta($curl[$i]); //写入管道 $work->write($content.PHP_EOL); },true); $pro_id=$pro->start(); $worker[$pro_id]=$pro; } //读取管道内容 foreach ($worker as $v) { echo $v->read().PHP_EOL; } //模拟爬虫 function curldeta($curl_arr) {//file_get_contents echo $curl_arr.PHP_EOL; file_get_contents($curl_arr); } //进程回收 swoole_process::wait(); $e_time = time(); echo '结束时间:'.date('H:i:s',$e_time).PHP_EOL; echo '所用时间:'.($e_time-$s_time).'秒'.PHP_EOL; ?>
多线程执行结果:
作为对比,单线程结果:
提升十分明显!
更多PHP相关知识,请访问PHP教程!
热心网友 时间:2022-04-29 11:01
只要包含网络和字符串处理功能的编程语言理论上都可以写爬虫,所以 PHP 当然完全没问题。如何用 PHP 写爬虫的前提是你要先调研清楚爬什么内容。这需要你针对要爬取目标做好充分的测试和准备工作,否则会浪费很多时间。
比如一个简单的“传统型”网站,那真的只需要用 file_get_contents 函数加正则就能搞定。觉的正则匹配数据太麻烦可以上 xpath。如果站点有了频率和 IP *,这时就要额外准备好代理 IP 池了。当发现抓取内容是 JS 渲染的,可能要考虑引入 headless browser 这种技术的 PHP 扩展了。对爬取效率有了要求后,多线程,抓取和解析分离,分布式也是要考虑的了。。。
回到问题本身如何写的问题,我个人觉得爬虫是个定制化比较高的业务需求,需要根据具体的场景来规划。如果是要写一个能解决所有爬虫场景的,那就不用自己写了,成熟的开源软件拿来直接用就行了。非要写的话可以直接参考这些成熟的软件,自己可以少踩很多坑。
热心网友 时间:2022-04-29 12:19
pcntl_fork或者swoole_process实现多进程并发。按照每个网页抓取耗时500ms,开200个进程,可以实现每秒400个页面的抓取。
curl实现页面抓取,设置cookie可以实现模拟登录
simple_html_dom 实现页面的解析和DOM处理
如果想要模拟浏览器,可以使用casperJS。用swoole扩展封装一个服务接口给PHP层调用
在这里有一套爬虫系统就是基于上述技术方案实现的,每天会抓取几千万个页面。
热心网友 时间:2022-04-29 13:53
$url = http://www.abc.com/;
$contents = file_get_contents($url);
//如果出现中文乱码使用下面代码
//$getcontent = iconv(”gb2312〃, “utf-8〃,file_get_contents($url));
//echo $getcontent;
echo $contents;
然后在从字符串中找到你要的追问哥们 你能留个qq号吗 我想问你点问题
追答对了,先给下分吧。
热心网友 时间:2022-04-29 15:45
如果页面太大就不能使用file_get_contents,要使用curl先把这个页面的信息得到,然后根据红酒价格的特征标签把价格提取出来,用preg_match_all,strpos就可以.有问题你直接问我,我给你详细解答.
QQ:1024091477
热心网友 时间:2022-04-29 17:53
我看到了这个问题,但我不会做。百度里面不能随便贴Q,不然我把我朋友的Q告诉你,他是专做网站的。你可以加我,说明做网站的。然后我在把朋友的号告诉你,你去咨询他。他可以帮你把网站弄到百度和谷歌搜索的首页。