整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

PHP爬取JSON数据写入表格

PHP爬取JSON数据写入表格
<?php
date_default_timezone_set('PRC');
function unicodeDecode($unicode_str){
    $json='{"str":"'.$unicode_str.'"}';
    $arr=json_decode($json,true);
    if(empty($arr)) return '';
    return $arr['str'];
}
function do_post($url, $param,$token,$cookie) {
    $ch=curl_init();//初始化curl
	//$this_header=array("Content-Type: multipart/form-data");
	curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($param),$token)
);
    curl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页
	//curl_setopt($ch, CURLOPT_HEADER,$this_header);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//执行后直接打印出来,方便调试
    curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
    curl_setopt($ch, CURLOPT_POSTFIELDS, $param); 
	//curl_setopt($ch, CURLOPT_TIMEOUT,2);//请求超时10s
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 跳过证书检查
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);// 不从证书中检查SSL加密算法是否存在
	curl_setopt($ch, CURLOPT_COOKIE, $cookie);
    $data=curl_exec($ch);//运行curl
    curl_close($ch);
	return $data;
}
 
 
function ArrayToExcel($arr,$name)
{
  require_once 'PHPExcel.php';
 //实例化
 $objPHPExcel=new PHPExcel();
 /*右键属性所显示的信息*/
  $objPHPExcel->GETProperties()->setCreator("xuan")  //作者
       ->setLastModifiedBy("xuan")  //最后一次保存者
       ->setTitle('数据EXCEL导出')  //标题
       ->setSubject('数据EXCEL导出') //主题
       ->setDescription('导出数据')  //描述
       ->setKeywords("excel")   //标记
       ->setCategory("result file");  //类别 
 //设置当前的表格 
 $objPHPExcel->setActiveSheetIndex(0);
 $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20);#设置单元格宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(8);
 // 设置表格第一行显示内容
 $objPHPExcel->GETActiveSheet()
  ->setCellValue('A1','所在党支部')
  ->setCellValue('B1','姓名')
  ->setCellValue('C1','性别')
  ->setCellValue('D1','身份证号')
  ->setCellValue('E1','联系方式');
 $key=1;
 /*以下就是对处理Excel里的数据,横着取数据*/
 foreach($arr as $v){
 
 //设置循环从第二行开始
 $key++;
       //Excel的第A列,name是你查出数组的键值字段,下面以此类推->setCellValue('F'.$key,$v['d1Name'])
	   if($v['a01004']=='1')
	   {
		   $sex='男';
	   }
	   else
	   {
		   $sex='女';
	   }
  $objPHPExcel->GETActiveSheet()
     ->setCellValue('A'.$key,$v['orgName'])
     ->setCellValue('B'.$key,$v['a01001'])
->setCellValue('C'.$key,$v['a01004'])
->setCellValue('D'.$key,$v['a01085'])
->setCellValue('E'.$key,$v['a37017']);
 }
 //设置当前的表格 
 $objPHPExcel->GETDefaultStyle()->GETAlignment() //设置居中显示
        ->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER)//垂直居中
        ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//水平居中
 $objPHPExcel->setActiveSheetIndex(0);
  ob_end_clean();  //清除缓冲区,避免乱码
  header('Content-Type: application/vnd.ms-excel'); //文件类型
  header('Content-Disposition: attachment;filename="'.$name.'.xls"'); //文件名
  header('Cache-Control: max-age=0');
  header('Content-Type: text/html; charset=utf-8'); //编码
  $objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');  //excel 2003
  $objWriter->save('php://output'); 
  exit;
}
 
if(isset($_GET['name']) and $_GET['name']!=null)
{
	$name=$_GET['name'];
	$datas=array();
	$token=$_GET['token'];
	$ss=$_GET['token'];
	$cookie=$_GET['cookie'];
	$headers=array($ss);
	$param='{"pagesize":2000,"pagenum":0,"orgCode":"000002000008000008000009000005","conditions":[],"orgId":"16e53e4f-b521-413a-ba07-37745245bd55","orgType":"611"}';
	$url='http://10.243.19.81:7710/api/imis/mainQuery';
	$jsondata=do_post($url, $param,$token,$cookie);
	//echo $jsondata;
    $datas=json_decode($jsondata,true)['datalist'];
	ArrayToExcel($datas,$name);
}
?>
<style>
#cookie{
        width: 30%;
        border: 1px solid #e2e2e2;
        height: 40px;
        padding:0 0 0 10px;
    }
#header{
        width: 69%;
        border: 1px solid #e2e2e2;
        height: 40px;
        padding:0 0 0 10px;
    }
#keywords{
        width: 15%;
        border: 1px solid #e2e2e2;
        height: 40px;
        padding:0 0 0 10px;
    }
#search{
        width: 10%;
        border: 1px solid #e2e2e2;
        height: 42px;
        text-align: center;
        line-height: 42px;
        cursor: pointer;
    }
</style>
<form method="GET" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
	<input id="keywords" type="search" name="name" placeholder="输入文件名" spellcheck="false" value="<?php if(isset($_GET['name']))echo $_GET['name'];?>"  autocomplete="off"/>
	<input id="cookie" type="cookie" name="cookie" placeholder="cookie" spellcheck="false" value="<?php if(isset($_GET['cookie']))echo $_GET['cookie'];?>"  autocomplete="off"/>
	<input id="token" type="cookie" name="token" placeholder="Authorization" spellcheck="false" value="<?php if(isset($_GET['token']))echo $_GET['token'];?>"  autocomplete="off"/>
	<input id="search" type="submit" value="导出" name="导出"/>
</form>

到工具:PHPEXCEL类,百度可搜索下载

年人只管利益,小孩子才分对错。。。

---- 网易云热评

一、GET请求

1、get可以理解为一个系统定义好的数组

2、通过var_dump看一下GET的类型,浏览器访问网址,后面加上"?aiyou=bucuo",相当于数组名为GET,键是aiyou,值是bucuo

3、一般get请求都是访问某个文件

4、通过GET写文件

<?php
$a=$_GET['aiyou'];//取键为aiyou的值
$b=fopen("aiyou.txt", "w+");//打开文件
fwrite($b, $a);//写入文件
?>

二、POST请求

1、新建一个html页面

<html>
<head>
<meta charset="utf-8">
<title>web安全工具库</title>
</head>
<body>
<form action="aiyou.php" method="post">
名字: <input type="text" name="fname">
密码: <input type="text" name="pass">
<input type="submit" value="提交">
</form>
</body>
</html>

2、新建一个获取数据的页面aiyou.php

<?php
header("Content-Type:text/html;charset=utf-8");
echo "欢迎";
echo $_POST["fname"];
echo "登录";
?>

3、浏览器提交

三、两者区别

1、安全性:GET请求中url中可见提交的数据、POST不可见

2、数据限制:GET只能传递ASCII字符,且最长是2048个字符,POST不受限制

3、历史信息:GET参数能保留在浏览器历史中,POST数据不能保存在浏览器历史中


禁止非法,后果自负

天被安排做一个抓取。

一、 什么是php采集程序?

二、 为什么要采集?

三、 采集些什么?

四、 如何采集?

五、 采集思路

六、 采集范例程序

七、 采集心得

什么是php采集程序?

php采集程序,也叫php小偷,主要是用于自动搜集网络上web页里特定内容,用php语言写的web程序,运行于支持php的平台上。谈到"自动搜集",你可能联想到百度goole,联想到搜索引擎所做的事情。php采集程序,正是做类似的工作。

为什么要采集?

互联网正以飞快的速度在发展,web数据每天以几何级数据量递增,面对这庞大的数据,作为一个网站管理员的你,该如何搜集自己所需要的信息呢?特别对某个 或某几个同类网站,你需要它们的大量信息,来充实你的网站内容,难道就只能复制粘贴的过日子吗?一个网站管理员,你真的就得花大量时间去搞原创内容,而与整个互联网信息量的发展速度脱节吗?这些问题的解决方法只有一个:采集。如果有那么一个程序,你帮你的网站自动或半自动的采集你所需要的特定内容,即时更 新你网站的信息,是否是你梦寐以求的呢?这就是采集程序出现的原因所在。

采集些什么?

这要看你做的什么类型的网站了。如果你做图片站,就采集图片;做音乐站,就采集mp3,做新闻站,就采集新闻等等。一切根据你网站的内容架构需要而定。确定你要采集的东西,才好写出相应的采集程序。

如何采集?

通常采集程序,都是有的放矢的。也就是需要有目标网站,搜集一些你需要的采集内容的网站,分别对其html代码进行分析,找出规律性的东西,依据你要采集 的特定内容,写出php代码。采集到你要的东西以后,你可以选择自己需要的存放方式。比如直接生成html页面,或是放进数据库,作进一步处理或是存放成 特定的形式,以备后用。

采集思路

采集程序的思路很简单大体可以分为以下几个步骤:

1. 获取远程文件源代码(file_get_contents或用fopen).

2.分析代码得到自己想要的内容(这里用正则匹配,一般是得到分页)。

3.跟根得到的内容进行下载入库等操作。

在这里第二步有可能要重复的操作好几次,比如说要先分析一下分页地址,在分析一下内页的内容才能取得我们想要的东西。

[html]

1. <?php

2. /****获取远程文件源代码常用三种方法***/

3. /***方法一、 fopen(),stream_context_create()方法****/

4. $opts=array(

5. 'http'=>array(

6. 'method'=>"GET",

7. 'header'=>"Accept-language: en\r\n" .

8. "Cookie: foo=bar\r\n"

9. )

10. );

11. $context=stream_context_create($opts);

12. $fp=fopen('http://www.example.com', 'r', false, $context);

13. fpassthru($fp);

14. fclose($fp); /******方法二、 socket*******/

15. function get_content_by_socket($url, $host){

16. $fp=fsockopen($host, 80) or die("Open ". $url ." failed");

17. $header="GET /".$url ." HTTP/1.1\r\n";

18. $header .="Accept: */*\r\n";

19. $header .="Accept-Language: zh-cn\r\n";

20. $header .="Accept-Encoding: gzip, deflate\r\n";

21. $header .="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; InfoPath.1; .NET CLR 2.0.50727)\r\n";

22. $header .="Host: ". $host ."\r\n";

23. $header .="Connection: Keep-Alive\r\n";

24. //$header .="Cookie: cnzz02=2; rtime=1; ltime=1148456424859; cnzz_eid=56601755-\r\n\r\n";

25. $header .="Connection: Close\r\n\r\n";

26. fwrite($fp, $header);

27. while (!feof($fp)) {

28. $contents .=fgets($fp, 8192);

29. }

30. fclose($fp);

31. return $contents;

32. }

33.

34. /******方法三、file_get_contents (),stream_context_create() 方法三********/

35. $opts=array(

36. 'http'=>array(

37. 'method'=>"GET",

38. 'header'=>"Content-Type: text/html; charset=utf-8"

39. )

40. );

41. $context=stream_context_create($opts);

42. $file=file_get_contents('http://www.sohu.com/', false, $context);

43.

44. /******方法四、 PHP的cURL http://www.chinaz.com/program/2010/0119/104346.shtml*******/

45. $ch=curl_init();

46. // 2. 设置选项,包括URL

47. curl_setopt($ch, CURLOPT_URL, "http://www.sohu.com");

48. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

49. curl_setopt($ch, CURLOPT_HEADER, 0);

50. curl_setopt($ch,CURLOPT_HTTPHEADER,array ("Content-Type: text/xml; charset=utf-8","Expect: 100-continue"));

51. // 3. 执行并获取HTML文档内容

52. $output=curl_exec($ch);

53. var_dump($output);

54. // 4. 释放curl句柄

55. curl_close($ch);

56.

57. /*注意

58. 1.使用file_get_contents和fopen必须空间开启allow_url_fopen。方法:编辑php.ini,设置 allow_url_fopen=On,allow_url_fopen关闭时fopen和file_get_contents都不能打开远程文件。

59. 2. 使用curl必须空间开启curl。方法:windows下修改php.ini,将extension=php_curl.dll前面的分号去掉,而且需 要拷贝ssleay32.dll和libeay32.dll到C:/WINDOWS/system32下;Linux下要安装curl扩展。

60. */

61. ?>

采集范例程序

[html]

1. /*一个图片下载函数*/

2. function getimg($url,$filename){

3. /*判断图片的url是否为空,如果为空停止函数*/

4. if($url==""){

5. return false;

6. }

7. /*取得图片的扩展名,存入变量$ext中*/

8. $ext=strrchr($url,".");

9. /*判断是否是合法的图片文件*/

10. if($ext!=".gif" && $ext!=".jpg"){

11. return false;

12. }

13. /*读取图片*/

14. $img=file_get_contents($url);

15. /*打开指定的文件*/

16. $fp=@fopen($filename.$ext,"a");

17. /*写入图片到指点的文件*/

18. fwrite($fp,$img);

19. /*关闭文件*/

20. fclose($fp);

21. /*返回图片的新文件名*/

22. return $filename.$ext;

23. }

采集图片php程序

[html]

1. 复制代码

2. <?php

3. /**

4. * 采集图片php程序

5. *

6. * Copyright(c) 2008 by 小超(ccxxcc) All rights reserved

7. *

8. * To contact the author write to {@link mailto:ucitmc@163.com}

9. *

10. * @author ccxxcc

11. * @version $Id: {filename},v 1.0 {time} $

12. * @package system

13. */

14.

15. set_time_limit(0);

16. /**

17. * 写文件

18. * @param string $file 文件路径

19. * @param string $str 写入内容

20. * @param char $mode 写入模式

21. */

22. function wfile($file,$str,$mode='w')

23. {

24. $oldmask=@umask(0);

25. $fp=@fopen($file,$mode);

26. @flock($fp, 3);

27. if(!$fp)

28. {

29. Return false;

30. }

31. else

32. {

33. @fwrite($fp,$str);

34. @fclose($fp);

35. @umask($oldmask);

36. Return true;

37. }

38. }

39.

40. function savetofile($path_get,$path_save)

41. {

42. @$hdl_read=fopen($path_get,'rb');

43. if($hdl_read==false)

44. {

45. echo("<span style='color:red'>$path_get can not get</span>");

46. Return ;

47. }

48. if($hdl_read)

49. {

50. @$hdl_write=fopen($path_save,'wb');

51. if($hdl_write)

52. {

53. while(!feof($hdl_read))

54. {

55. fwrite($hdl_write,fread($hdl_read,8192));

56. }

57. fclose($hdl_write);

58. fclose($hdl_read);

59. return 1;

60. }

61. else

62. return 0;

63. }

64. else

65. return -1;

66. }

67.

68. function getExt($path)

69. {

70. $path=pathinfo($path);

71. return strtolower($path['extension']);

72. }

73.

74. /**

75. * 按指定路径生成目录

76. *

77. * @param string $path 路径

78. */

79. function mkDirs($path)

80. {

81. $adir=explode('/',$path);

82. $dirlist='';

83. $rootdir=array_shift($adir);

84. if(($rootdir!='.'||$rootdir!='..')&&!file_exists($rootdir))

85. {

86. @mkdir($rootdir);

87. }

88. foreach($adir as $key=>$val)

89. {

90. if($val!='.'&&$val!='..')

91. {

92. $dirlist .="/".$val;

93. $dirpath=$rootdir.$dirlist;

94. if(!file_exists($dirpath))

95. {

96. @mkdir($dirpath);

97. @chmod($dirpath,0777);

98. }

99. }

100. }

101. }

102.

103. /**

104. * 从文本中取得一维数组

105. *

106. * @param string $file_path 文本路径

107. */

108. function getFileListData($file_path)

109. {

110. $arr=@file($file_path);

111. $data=array();

112. if(is_array($arr) && !empty($arr))

113. {

114. foreach($arr as $val)

115. {

116. $item=trim($val);

117. if(!empty($item))

118. {

119. $data[]=$item;

120. }

121. }

122. }

123. Return $data;

124. }

125.

126. //采集开始

127.

128. //传入自己的需要采集的图片url列表文本文件 每个图片url写一行

129. $url_file=isset($_GET['file'])&&!empty($_GET['file'])?$_GET['file']:null;

130. $txt_url="txt/".$url_file;

131.

132. $urls=array_unique(getFileListData($txt_url));

133. if(empty($urls))

134. {

135. echo('<div style="color:red">无链接地址</div>');

136. die();

137. }

138. $save_url="images/".date("y_m_d",time())."/";

139. mkDirs($save_url); //按日期建立文件夹

140. $i=1;

141. if(is_array($urls)&&count($urls))

142. {

143. foreach($urls as $val)

144. {

145. savetofile($val,$save_url.date("His",time())."_".$i.".".getExt($val));

146. echo($i.".".getExt($val)." got\n");

147. $i++;

148. }

149. }

150.

151. echo('<div style="color:green">finish</div>');

152.

153. ?>

采集心得

共享一下个人的采集心德:

1.不采那些作防盗链了的站,其实可以作假来路但是这样的站采集成本太高

2.采集尽量快的站,最好在本地进行采集

3.采集时有很多时候可以先把一部分数据存入数据库,等以后进行下一步的处理。

4.采集的时候一定要作好出错处理,我一般都是如果采集三次没有成功就跳过。以前经常就因为一条内容不能采就卡在那里一直的采。

5.入库前一定要作好判断,检查内容的合法,过滤不必要的字符串。

后记:对于大部分转行的人来说,找机会把自己的基础知识补齐,边工作边补基础知识,真心很重要。

"我们相信人人都可以成为一个IT大神,现在开始,选择一条阳光大道,助你入门,学习的路上不再迷茫。这里是北京尚学堂,初学者转行到IT行业的聚集地。"