重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
首先,队列的作用不是批量处理,而是延时处理,也叫异步处理
创新互联-专业网站定制、快速模板网站建设、高性价比旬阳网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式旬阳网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖旬阳地区。费用合理售后完善,十余年实体公司更值得信赖。
要做批量采集的话,首先你要划分好区间,可以用php的多进程,也可以用php的cli模式做,只要数据不窜就行
这个需要配合js,打开一个html页面,首先js用ajax请求页面,返回第一个页面信息确定处理完毕(ajax有强制同步功能),ajax再访问第二个页面。(或者根据服务器状况,你可以同时提交几个URL,跑几个相同的页面)
参数可以由js产生并传递url,php后台页面根据URL抓页面。然后ajax通过php,在数据库或者是哪里设一个标量,标明检测到哪里。由于前台的html页面执行多少时候都没问题,这样php的内存限制和执行时间限制就解决了。
因为不会浪费大量的资源用一个页面来跑一个瞬间500次的for循环了。(你的500次for循环死了原因可能是获取的数据太多,大过了php限制的内存)
不过印象中curl好像也有强制同步的选项,就是等待一个抓取后再执行下一步。但是这个500次都是用一个页面线程处理,也就是说肯定会远远大于30秒的默认执行时间。
一般来说,PHP采集数据最简单的办法是使用file_get_content函数,功能更强大的推荐使用cURL函数库。
问题其实不难,自己都能写。给你几个思路吧:
1.在百度知道中,输入linux,然后会出现列表。复制浏览器地址栏内容。
然后翻页,在复制地址栏内容,看看有什么不同,不同之处,就是你要循环分页的i值。
当然这个是笨方法。
2.使用php的file或者file_get_contents函数,获取链接URL的内容。
3.通过php正则表达式,获取你需要的3个字段内容。
4.写入数据库。
需要注意的是,百度知道有可能做了防抓取的功能,你刚一抓几个页面,可能会被禁止。
建议也就抓10页数据。
其实不难,你肯定写的出来。 还有,网上应该有很多抓取工具,你找找看,然后将抓下来的数据
在做分析。写入数据库。
$sql = "insert into myorder (pid,amount,ordernumber,time,uid,status) VALUES ";
foreach ($ShoppingCart as $k = $v){
$sql .= "(".$v['pid'].",".$v['amount'].",'$ordernumber','$time','$uid','$status'),";
$sql = substr($sql, 0,strlen($sql)-1);
$res = mysql_query($sql,$conn);
if(!$res) return false;
}