当前位置: 编程技术>php
本页文章导读:
▪php爬虫抓取百度贴吧图片 最近有从百度贴吧上批量下载图片的需求,即从某一个贴吧下载所有图片。本来打算用python写的,因为对python不熟悉,试了minidom,HtmlParser等,感觉上不了手,还是使用比较擅长的php语言吧。.........
▪PHP(http协议)相关应用知识 1、通过http响应,控制浏览器在一定时间跳转<?php //通过http响应,控制浏览器在一定时间跳转 //3秒 浏览器跳转到指定url //header("Refresh: 3; url=http://www.baidu.com"); header.........
▪PHP(http协议)-文件下载 <?php //文件下载,下载一张图片 //$file_name="Angel.mp3"; $file_name="小丸子.jpg"; //出现中文 程序无法完成下载 提示:文件不存在 //对文件进行转码(PHP文件函数 比较古老 需对中文码转成 g.........
[1]php爬虫抓取百度贴吧图片
最近有从百度贴吧上批量下载图片的需求,即从某一个贴吧下载所有图片。
本来打算用python写的,因为对python不熟悉,试了minidom,HtmlParser等,感觉上不了手,还是使用比较擅长的php语言吧。
以下是源代码:
1 <?php
2 //运行时间
3 @set_time_limit(60);
4 //贴吧名称
5 $tbname = "%CD%BC%C6%AC";
6 //抓取类型 0-按照帖子顺序 1-按照贴图顺序
7 $type = 0;
8 //列表页url
9 $listurltpl = "http://tieba.baidu.com/f?kw=%s".($type?"&tp=1":"&pn=");
10 //图册页url
11 $galleryurltpl = "http://tieba.baidu.com/photo/bw/picture/guide?kw=%s&tid=%s&next=9999";
12 //图片url
13 $imageurltpl = "http://imgsrc.baidu.com/forum/pic/item/%s.jpg";
14 //本地的目录
15 $savepath = "h:/images/";
16 //帖子子文件夹
17 $filedirtpl = $savepath."%s/";
18 //图片文件
19 $filenametpl = $savepath."%s/%s.jpg";
20
21 $listurl = sprintf($listurltpl,$tbname);
22 //抓取起始点
23 $pn = 0;
24 while(1)
25 {
26 if (!$type) $listurl .= $pn;
27 //得到列表页源代码
28 $listhtml = file_get_contents($listurl);
29 //匹配出帖子id
30 if($type)
31 preg_match_all('/<div aep_wrapper\" id=\"pic_item_(\d+)\" tid=\"\d+\">/',$listhtml,$m1);
32 else
33 preg_match_all('/<ul threadlist_media j_threadlist_media\" id=\"fm(\d+)\"/',$listhtml,$m1);
34 //得到帖子id列表
35 $tidlist = $m1[1];
36 echo "Fetching ... <br /> \r\n";
37 foreach($tidlist as $tid)
38 {
39 echo "--Gallery $tid <br /> \r\n";
40 $galleryurl = sprintf($galleryurltpl,$tbname,$tid);
41 //得到帖子图册的源代码
42 $galleryhtml = file_get_contents($galleryurl);
43 //匹配出图片id
44 preg_match_all('/\{\"original\":\{\"id\":\"(\w+)\"/',$galleryhtml,$m2);
45 //得到图片id列表
46 $pidlist = $m2[1];
47 foreach($pidlist as $pid)
48 {
49 echo "----Picture {$tid}/{$pid}.jpg ";
50 $filedir = sprintf($filedirtpl,$tid);
51 $filename = sprintf($filenametpl,$tid,$pid);
52 //文件是否存在
53 if(!is_file($filename))
54 {
55 $imageurl
2 //运行时间
3 @set_time_limit(60);
4 //贴吧名称
5 $tbname = "%CD%BC%C6%AC";
6 //抓取类型 0-按照帖子顺序 1-按照贴图顺序
7 $type = 0;
8 //列表页url
9 $listurltpl = "http://tieba.baidu.com/f?kw=%s".($type?"&tp=1":"&pn=");
10 //图册页url
11 $galleryurltpl = "http://tieba.baidu.com/photo/bw/picture/guide?kw=%s&tid=%s&next=9999";
12 //图片url
13 $imageurltpl = "http://imgsrc.baidu.com/forum/pic/item/%s.jpg";
14 //本地的目录
15 $savepath = "h:/images/";
16 //帖子子文件夹
17 $filedirtpl = $savepath."%s/";
18 //图片文件
19 $filenametpl = $savepath."%s/%s.jpg";
20
21 $listurl = sprintf($listurltpl,$tbname);
22 //抓取起始点
23 $pn = 0;
24 while(1)
25 {
26 if (!$type) $listurl .= $pn;
27 //得到列表页源代码
28 $listhtml = file_get_contents($listurl);
29 //匹配出帖子id
30 if($type)
31 preg_match_all('/<div aep_wrapper\" id=\"pic_item_(\d+)\" tid=\"\d+\">/',$listhtml,$m1);
32 else
33 preg_match_all('/<ul threadlist_media j_threadlist_media\" id=\"fm(\d+)\"/',$listhtml,$m1);
34 //得到帖子id列表
35 $tidlist = $m1[1];
36 echo "Fetching ... <br /> \r\n";
37 foreach($tidlist as $tid)
38 {
39 echo "--Gallery $tid <br /> \r\n";
40 $galleryurl = sprintf($galleryurltpl,$tbname,$tid);
41 //得到帖子图册的源代码
42 $galleryhtml = file_get_contents($galleryurl);
43 //匹配出图片id
44 preg_match_all('/\{\"original\":\{\"id\":\"(\w+)\"/',$galleryhtml,$m2);
45 //得到图片id列表
46 $pidlist = $m2[1];
47 foreach($pidlist as $pid)
48 {
49 echo "----Picture {$tid}/{$pid}.jpg ";
50 $filedir = sprintf($filedirtpl,$tid);
51 $filename = sprintf($filenametpl,$tid,$pid);
52 //文件是否存在
53 if(!is_file($filename))
54 {
55 $imageurl
[2]PHP(http协议)相关应用知识
1、通过http响应,控制浏览器在一定时间跳转
<?php
//通过http响应,控制浏览器在一定时间跳转
//3秒 浏览器跳转到指定url
//header("Refresh: 3; url=http://www.baidu.com");
header("Refresh: 3; url=http://localhost/http/Myimport.php");
?>
//通过http响应,控制浏览器在一定时间跳转
//3秒 浏览器跳转到指定url
//header("Refresh: 3; url=http://www.baidu.com");
header("Refresh: 3; url=http://localhost/http/Myimport.php");
?>
2、设置禁用缓存,通过httpwatch抓包工具可以查看
<?php
//禁用缓存
header("Expires: -1");
header("Cache-Control: no-cache");
header("pragam: no-cache");
echo "禁用缓存";
?>
//禁用缓存
header("Expires: -1");
header("Cache-Control: no-cache");
header("pragam: no-cache");
echo "禁用缓存";
?>
本文链接
[3]PHP(http协议)-文件下载
<?php
//文件下载,下载一张图片
//$file_name="Angel.mp3";
$file_name="小丸子.jpg"; //出现中文 程序无法完成下载 提示:文件不存在
//对文件进行转码(PHP文件函数 比较古老 需对中文码转成 gb2312)
//iconv — Convert string to requested character encoding
$file_name=iconv("utf-8","gb2312",$file_name);
//设置文件下载路径(相对路径)
//$file_path="./dowm/".$file_name;
//使用绝对路径
$file_path=$_SERVER['DOCUMENT_ROOT']."/http/dowm/".$file_name;
//打开文件---先判断再操作
if(!file_exists($file_path)){
echo "文件不存在";
return ; //直接退出
}
//存在--打开文件
$fp=fopen($file_path,"r");
//获取文件大小
$file_size=filesize($file_path);
//http 下载需要的响应头
header("Content-type: application/octet-stream"); //返回的文件
header("Accept-Ranges: bytes"); //按照字节大小返回
header("Accept-Length: $file_size"); //返回文件大小
header("Content-Disposition: attachment; filename=".$file_name);//这里客户端的弹出对话框,对应的文件名
//向客户端返回数据
//设置大小输出
$buffer=1024;
//为了下载安全,我们最好做一个文件字节读取计数器
$file_count=0;
//判断文件指针是否到了文件结束的位置(读取文件是否结束)
while(!feof($fp) && ($file_size-$file_count)>0){
$file_data=fread($fp,$buffer);
//统计读取多少个字节数
$file_count+=$buffer;
//把部分数据返回给浏览器
echo $file_data;
}
//关闭文件
fclose($fp);
?>
//文件下载,下载一张图片
//$file_name="Angel.mp3";
$file_name="小丸子.jpg"; //出现中文 程序无法完成下载 提示:文件不存在
//对文件进行转码(PHP文件函数 比较古老 需对中文码转成 gb2312)
//iconv — Convert string to requested character encoding
$file_name=iconv("utf-8","gb2312",$file_name);
//设置文件下载路径(相对路径)
//$file_path="./dowm/".$file_name;
//使用绝对路径
$file_path=$_SERVER['DOCUMENT_ROOT']."/http/dowm/".$file_name;
//打开文件---先判断再操作
if(!file_exists($file_path)){
echo "文件不存在";
return ; //直接退出
}
//存在--打开文件
$fp=fopen($file_path,"r");
//获取文件大小
$file_size=filesize($file_path);
//http 下载需要的响应头
header("Content-type: application/octet-stream"); //返回的文件
header("Accept-Ranges: bytes"); //按照字节大小返回
header("Accept-Length: $file_size"); //返回文件大小
header("Content-Disposition: attachment; filename=".$file_name);//这里客户端的弹出对话框,对应的文件名
//向客户端返回数据
//设置大小输出
$buffer=1024;
//为了下载安全,我们最好做一个文件字节读取计数器
$file_count=0;
//判断文件指针是否到了文件结束的位置(读取文件是否结束)
while(!feof($fp) && ($file_size-$file_count)>0){
$file_data=fread($fp,$buffer);
//统计读取多少个字节数
$file_count+=$buffer;
//把部分数据返回给浏览器
echo $file_data;
}
//关闭文件
fclose($fp);
?>
本文链接
最新技术文章:
 
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!