<?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行業的聚集地。"
*請認真填寫需求信息,我們會在24小時內與您取得聯系。