本文目录一览:
- 1、火车采集器使用PHP插件配置循环标签的方法
- 2、php采集代码循环问题
- 3、求 php 循环执行大量数据 解决办法。
- 4、php采集大数据的方案
- 5、PHP如何执行两次循环 我现在的采集程序能执行并写入了,现在的问题是要采集的网址有两个参数一个是ID...
- 6、php curl 大量数据采集
火车采集器使用PHP插件配置循环标签的方法
*参数说明:
* LabelUrl - 当前采集的页面的Url地址
*$LabelCookie - 当前采集页面,服务器返回的Cookie信息。
根据以上参数可以推断,我们需要在$LabelArray['Html'] 中对原标签进行处理
例如(替换):
插件中:
if( LabelArray['PageType']=="Content")
{
LabelArray['Html']);
}
else if( JsonData[initDataObj][goods][skus] as specs = normalPrice = groupPrice = skuId = shuxing = "";-php采集循环
foreach ( spec) {
spec[spec_key].'/spanspan:'. shuxing = spe;
}
shuxing.'/spanspan单价:'. sku[groupPrice].'/spanspanskuId:'. LabelArray['Html']='test'. LabelArray['Html'];-php采集循环
}
遇到的坑:
测试时在else if( LabelArray['PageType']=="List")中处理
一个插件文件需要在对应的配置中选择才会执行,例如插件有请求处理,结果处理,但是火车头配置中至选了结果处理插件,则请求的部分不会执行
php采集代码循环问题
header("Content-type: text/html; charset=gb2312");
$url = ""; //目标站
$fp = @fopen($url, "r") or die("超时");
$fcontents = file_get_contents($url);
preg_match_all("/ a target=\"_blank\" href=\"(http:\/\/\/Book\/(.*?)\.aspx)\"/is", $fcontents, $regs);-php采集循环
foreach($regs[1] as $key = $item)
{
echo "a href=\"{$item}\"{$item}/a", "br/";
}
die();
这样子修改就能得到你想要的结果了。
求 php 循环执行大量数据 解决办法。
你用网页的方式,让人点击,服务器采集,简直是弱爆了。每个人的点击循环1000次,来个100人同时点,你要用的是普通的虚拟机就不行了。
最好是换种方式实现,不要通过网页进行采集。
可以非常简单的在数据库的表,创建一个采集队列,后台执行一个crontab的计划任务,去完成队列里的采集任务。
php采集大数据的方案
1、建议你读写数据和下载图片分开,各用不同的进程完成。
比如说,取数据用get-data.php,下载图片用get-image.php。
2、多进程的话,php可以简单的用pcntl_fork()。这样可以并发多个子进程。
但是我不建议你用fork,我建议你安装一个gearman worker。这样你要并发几个,就启几个worker,写代码简单,根本不用在代码里考虑thread啊,process等等。
3、综上,解决方案这样:
(1)安装gearman worker。
(2)写一个get-data.php,在crontab里设置它每5分钟执行一次,只负责读数据,然后把读回来的数据一条一条的扔到 gearman worker的队列里;
然后再写一个处理数据的脚本作为worker,例如叫process-data.php,这个脚本常驻内存。它作为worker从geraman 队列里读出一条一条的数据,然后跟你的数据库老数据比较,进行你的业务逻辑。如果你要10个并发,那就启动10个process-data.php好了。处理完后,如果图片地址有变动需要下载图片,就把图片地址扔到 gearman worker的另一个队列里。-php采集循环
(3)再写一个download-data.php,作为下载图片的worker,同样,你启动10个20个并发随便你。这个进程也常驻内存运行,从gearman worker的图片数据队列里取数据出来,下载图片-php采集循环
4、常驻进程的话,就是在代码里写个while(true)死循环,让它一直运行好了。如果怕内存泄露啥的,你可以每循环10万次退出一下。然后在crontab里设置,每分钟检查一下进程有没有启动,比如说这样启动3个process-data worker进程:-php采集循环
* * * * * flock -xn /tmp/process-data.1.lock -c '/usr/bin/php /process-data.php /dev/null 21'
* * * * * flock -xn /tmp/process-data.2.lock -c '/usr/bin/php /process-data.php /dev/null 21'
* * * * * flock -xn /tmp/process-data.3.lock -c '/usr/bin/php /process-data.php /dev/null 21'
不知道你明白了没有
PHP如何执行两次循环 我现在的采集程序能执行并写入了,现在的问题是要采集的网址有两个参数一个是ID...
?
@$page=$_GET['page'];
@$id=$_GET['id'];
if($id$page){
if($page6){
$page++;
$x='网址?id='.$id.'page='.$page;
sleep(1);//休息1秒看效果
header("location:$x");
}else{
$id++;
$x='网址?id='.$id.'page=1';
sleep(2);//休息2秒看效果
header("location:$x");
}
}
?
php curl 大量数据采集
这个需要配合js,打开一个html页面,首先js用ajax请求页面,返回第一个页面信息确定处理完毕(ajax有强制同步功能),ajax再访问第二个页面。(或者根据服务器状况,你可以同时提交几个URL,跑几个相同的页面)-php采集循环
参数可以由js产生并传递url,php后台页面根据URL抓页面。然后ajax通过php,在数据库或者是哪里设一个标量,标明检测到哪里。由于前台的html页面执行多少时候都没问题,这样php的内存限制和执行时间限制就解决了。-php采集循环
因为不会浪费大量的资源用一个页面来跑一个瞬间500次的for循环了。(你的500次for循环死了原因可能是获取的数据太多,大过了php限制的内存)
不过印象中curl好像也有强制同步的选项,就是等待一个抓取后再执行下一步。但是这个500次都是用一个页面线程处理,也就是说肯定会远远大于30秒的默认执行时间。