文档章节

利用php封装函数抓取京东商城省市县数据

摇滚哈哈狗
 摇滚哈哈狗
发布于 2014/09/05 14:22
字数 782
阅读 125
收藏 0

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 14-9-1
 * Time: 下午2:00
 */
error_reporting(E_ALL);
require './source/class/class_core.php';
$discuz = & discuz_core::instance();
//$cachelist = array('plugin');
$discuz->cachelist = $cachelist;
$discuz->init();




/**
* 远程打开URL
* @param string $url   打开的url, 如
* @param int $limit   取返回的数据的长度
* @param string $post   要发送的 POST 数据,如uid=1&password=1234
    * @param string $cookie 要模拟的 COOKIE 数据,如uid=123&auth=a2323sd2323
    * @param bool $bysocket TRUE/FALSE 是否通过SOCKET打开
* @param string $ip   IP地址
* @param int $timeout   连接超时时间
* @param bool $block   是否为阻塞模式
* @return    取到的字符串
*/
function uc_fopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 50, $block = false) {
    $return = '';
    $matches = parse_url($url);
    !isset($matches['host']) && $matches['host'] = '';
    !isset($matches['path']) && $matches['path'] = '';
    !isset($matches['query']) && $matches['query'] = '';
    !isset($matches['port']) && $matches['port'] = '';
    $host = $matches['host'];
    $path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/';
    $port = !empty($matches['port']) ? $matches['port'] : 80;
    if($post) {
        $out = "POST $path HTTP/1.0\r\n";
        $out .= "Accept: **\r\n";
        //$out .= "Referer: $boardurl\r\n";
        $out .= "Accept-Language: zh-cn\r\n";
        $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
        $out .= "Host: $host\r\n";
        $out .= "Connection: Close\r\n";
        $out .= "Cookie: $cookie\r\n\r\n";
    }else {
        $out = "GET $path HTTP/1.0\r\n";
        $out .= "Accept: */*\r\n";
        //$out .= "Referer: $boardurl\r\n";
        $out .= "Accept-Language: zh-cn\r\n";
        $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
        $out .= "Host: $host\r\n";
        $out .= "Connection: Close\r\n";
        $out .= "Cookie: $cookie\r\n\r\n";
    }

    $fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
    if(!$fp) {
        return '';//note $errstr : $errno \r\n
    } else {
        stream_set_blocking($fp, $block);
        stream_set_timeout($fp, $timeout);
        @fwrite($fp, $out);
        $status = stream_get_meta_data($fp);
        if(!$status['timed_out']) {
            while (!feof($fp)) {
                if(($header = @fgets($fp)) && ($header == "\r\n" || $header == "\n")) {
                    break;
                }
            }

            $stop = false;
            while(!feof($fp) && !$stop) {
                $data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit));
                $return .= $data;
                if($limit) {
                    $limit -= strlen($data);
                    $stop = $limit <= 0;
                }
            }
        }
        @fclose($fp);
        $lenth=strlen($return);
        $return=substr($return,1,$lenth-2);
        return json_decode($return,true);
    }
}

$return=uc_fopen('http://d.360buy.com/area/get?fid=0');
/*function  getdata($id=0){
    $string='';
    $arr=uc_fopen('http://d.360buy.com/area/get?fid='.$id);
    $length=$id?$lenth=count($arr):34;
    for($i=0;$i<$length;$i++){
         $string.=$arr[$i]['name'];
         sleep(5);
         getdata($arr[$i]['id']);
    }

  return $string;
}*/

@$fp = fopen("sql.txt","w");
if(!$fp){
    echo "system error";
    exit();
}
for($i=0;$i<34;$i++){
 //echo "insert into ultrax_common_district_Tmp (code,name,upcode,level) value (".$return[$i]['id'].",'".$return[$i]['name']."',0,0);<br/>";
    $city=uc_fopen('http://d.360buy.com/area/get?fid='.$return[$i]['id']);
    sleep(1);
    for($j=0;$j<count($city);$j++){
            //$fileData="insert into ultrax_common_district_Tmp (code,name,upcode,level) value (".$city[$j]['id'].",'".$city[$j]['name']."',".$return[$i]['id'].",1);\n";
            //fwrite($fp,$fileData);
        //echo "insert into ultrax_common_district_Tmp (code,name,upcode,level) value ('".$city[$j]['id']."',".$city[$j]['name']."',".$return[$i]['id'].",1);<br/>";
        $area=uc_fopen('http://d.360buy.com/area/get?fid='.$city[$j]['id']);
        $length=count($area);
        for($k=0;$k<count($area);$k++){

            $fileData="insert into ultrax_common_district_Tmp (code,name,upcode,level) value (".$area[$k]['id'].",'".$area[$k]['name']."',".$city[$j]['id'].",2);\n";
            fwrite($fp,$fileData);
            //echo "insert into ultrax_common_district_Tmp (code,name,upcode,level) value (".$area[$k]['id'].",'".$area[$k]['name']."',".$city[$j]['id'].",2);\n";
        }
      sleep(1);
    }

}
fclose($fp);
exit;


/*jquery jsonp  无法进行抓取,会出现阻塞的情况*/
echo  $script=<<<script
<html>
<body>
<script src="./static/js/jquery-1.10.2.min.js"></script>
<script>
var data=$return;
var city=null;
function getdata(id){
  $.ajax({
             url: "http://d.360buy.com/area/get?fid="+id,
             // the name of the callback parameter, as specified by the YQL service
            jsonp: "callback",
            // tell jQuery we're expecting JSONP
            dataType: "jsonp",
              // tell YQL what we want and that we want JSON
            data: {
                     format: "json"
                  },
              // work with the response
          success: function(response) {
                for(var j=0;j<response.length;j++){
                  console.log("insert into city (name,upid) values ('"+response[j]["name"]+"',"+id+");<br>");
                }
            }
    });
}
for(var i= 0;i<34;i++){
    var province=data[i];
    //setTimeout(getdata(data[i]['id']),1000000000000*i);
    for(var j=0;j<province.length;j++){
        alert(province);
        setTimeout(getdata(province[j]['id']),1000000000000*j);
    }
  //document.write("insert into province (name,upid) values ("+data[i]["name"]+"',0);<br>");
}
</script>
</body>
</html>
script;


/*新版数据*/

/*$oprovince=DB::query(" select * from ".DB::table("common_district")." where upid = 0");
if($province){
    $oarea=array();
    while($result = DB::fetch($oprovince)) {
        $oarea[]=$result;
    }
}else{
    return false;
}*/


© 著作权归作者所有

上一篇: 数据类型
下一篇: linux 学习笔记
摇滚哈哈狗
粉丝 14
博文 226
码字总数 28445
作品 0
深圳
程序员
私信 提问
优化省市县三级联动(查询数据库)

javaWeb项目,页面实现省市县三级联动。 想到三种方法: 1.查询出所有省并显示,选择省或市,利用ajax从后台查询出对应数据,再显示。 2.查询出所有省市县,数据隐藏到页面,jquery实现联动显...

田野_7
2016/05/30
1K
6
京东商城技术揭秘:.NET与Java博弈

【IT168 技术】春运期间,铁道部的现任老大12306网站在面对日均10亿多次的点击量时,频繁瘫痪,给我们带来的惨痛教训是,关键时刻不能掉链子,这也印证了科技是第一生产力。   而说起中国自...

作者:DoubleLife
2012/01/19
0
0
《CURL技术知识教程》系列分享专栏

《CURL技术知识教程》已整理成PDF文档,点击可直接下载至本地查阅 https://www.webfalse.com/read/201737.html 文章 PHP采集相关教程之一 CURL函数库 php中通过curl模拟登陆discuz论坛的实现...

开元中国2015
2018/11/06
51
0
jQuery改造插件,添加回调函数

桃子红了呐
2017/10/01
0
0
php中如何把一个二维数组写成xml或者json格式的,前提是不知道数组元素的个数

php开发中,想自己写一个mysql+ajax的省市县三级联动,一切都写好了,就等着返回xml或者json格式的数据了。 查询是:$sql="select * from cities where sid=1";//1为江苏省的id.这个不用多说...

梦碎年代
2012/08/14
5.6K
11

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL 11.3 locking

rudi
今天
5
0
Mybatis Plus sql注入器

一、继承AbstractMethod /** * @author beth * @data 2019-10-23 20:39 */public class DeleteAllMethod extends AbstractMethod { @Override public MappedStatement injectMap......

一个yuanbeth
今天
10
1
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
今天
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
今天
8
0
队列-链式(c/c++实现)

队列是在线性表功能稍作修改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。作用就是通过伟大的程序员来实现算法解决现实生活...

白客C
今天
81
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部