首页 热点资讯 义务教育 高等教育 出国留学 考研考公

php 实现网络爬虫

发布网友 发布时间: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;
?>

多线程执行结果:

4d8084991537fd94f8576f37ac80f21.png

作为对比,单线程结果:

a3d1d04d9063f5c55fc958a0e72162b.png

提升十分明显!

更多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告诉你,他是专做网站的。你可以加我,说明做网站的。然后我在把朋友的号告诉你,你去咨询他。他可以帮你把网站弄到百度和谷歌搜索的首页。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com