简单的爬虫爬的完整的<img>标签,生成<img>标签结果文件与爬虫经历的网页。

<?php
/*
* 从给定的url获取html内容
*

*/
function _getUrlContent($url){
$handle = fopen($url, "r");
if($handle){
$content = stream_get_contents($handle,1024*1024);
return $content;
}else{
return false;
}
}
/**
* 从html内容中筛选链接
*
*/
function _filterUrl($web_content){
$reg_tag_a = '/<[a|A].*?href=[\'\"]{0,1}([^>\'\"\ ]*).*?>/';
$reg_tag_b = '/<\s*img\s+[^>]*?src\s*=\s*(\'|\")(.*?)\\1[^>]*?\/?\s*>/i';   //修改这个就可以修改爬取内容
$result = preg_match_all($reg_tag_a,$web_content,$match_result);
$result1 = preg_match_all($reg_tag_b,$web_content,$match_result1);
if($result){

//var_dump($match_result1);
foreach ($match_result1 as $img) {
if(is_string($img))
{
$file = fopen("img.txt","a");
fputs($file,$img."\r\n");

}
else
{
foreach ($img as $img1)
{
if(is_string($img1))
{
$file = fopen("img.txt","a");
fputs($file,$img1."\r\n");

}
else
{
foreach ($img1 as $img2)
{
if(is_string($img2))
{
$file = fopen("img.txt","a");
fputs($file,$img2."\r\n");

}
else
{
foreach ($img2 as $img3)
{
if(is_string($img3))
{
$file = fopen("img.txt","a");
fputs($file,$img3."\r\n");

}
}
}
}
}
}
}

}

return $match_result[1];
}
}
/**
* 修正相对路径
*

*/
function _reviseUrl($base_url,$url_list){
$url_info = parse_url($base_url);
$base_url = $url_info["scheme"].'://';
if($url_info["user"]&&$url_info["pass"]){
$base_url .= $url_info["user"].":".$url_info["pass"]."@";
}
$base_url .= $url_info["host"];
if($url_info["port"]){
$base_url .= ":".$url_info["port"];
}
$base_url .= $url_info["path"];
print_r($base_url);
if(is_array($url_list)){
foreach ($url_list as $url_item) {
if(preg_match('/^http/',$url_item)){
//已经是完整的url
$result[] = $url_item;
}else {
//不完整的url
$real_url = $base_url.'/'.$url_item;
$result[] = $real_url;
}
}
return $result;
}else {
return;
}
}
/**
* 爬虫
*
* @param string $url
* @return array
*/
function crawler($url){
$content = _getUrlContent($url);
if($content){
$url_list = _reviseUrl($url,_filterUrl($content));
if($url_list){
return $url_list;
}else {
return ;
}
}else{
return ;
}
}
/**
* 测试用主程序
*
*/
function main(){
$current_url = "https://www.baidu.com/";//初始url
$fp_puts = fopen("url.txt","ab");//记录url列表
$fp_gets = fopen("url.txt","r");//保存url列表
do{
$result_url_arr = crawler($current_url);
if($result_url_arr){
foreach ($result_url_arr as $url) {
fputs($fp_puts,$url."\r\n");
}
}
}while ($current_url = fgets($fp_gets,1024));//不断获得url
}
main();
?>

最新文章

  1. javascript基础知识
  2. 子句jion
  3. 类似\u4e0b\u6ce8\u903e\u65f6解码
  4. POJ1182 食物链
  5. servlet 容器,工作原理,优缺点
  6. [RxJS] Observables can throw errors
  7. LeetCode_Text Justification
  8. C# winfrom 模拟ftp文件管理
  9. 转:什么是 HTTP Headers?
  10. PHP中的浮点精度和类型
  11. Docker容器如何互联
  12. JMeter(十三)-代理服务器录制脚本
  13. css 实现文字提示说明、文字绕图效果
  14. 分治(超级easy 不要看)
  15. [ 随手记 2 ] C/C++ 数组/指针/传数组到函数/指针数组/数组指针
  16. Ganglia监控扩展实现机制
  17. ADSL 动态IP拨号VPS 软件配置
  18. 基于Python的机器学习实战:KNN
  19. 『流畅的Python』第9章笔记_对象
  20. httpClient创建对象、设置超时

热门文章

  1. Java 实现ftp 文件上传、下载和删除
  2. Openflow协议详解
  3. css解决多行溢出显示省略号
  4. silverlight 从数据库获取到数据,动态生成XMLWEN文件,并获取文件进行操作
  5. GitHub看板系统(Project)
  6. D1 java概述
  7. VirtualBox安装Archlinux并配置桌面环境
  8. 中文输入法input事件
  9. Spring-AOP 基于注解的实现
  10. 04PHP HTML状态保持