×

php采集循环

php采集循环(php采集教程)

admin admin 发表于2023-04-06 19:10:09 浏览52 评论0

抢沙发发表评论

本文目录一览:

火车采集器使用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秒的默认执行时间。