Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 268|回复: 0

[默认分类] java简易爬虫Crawler

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-6-27 10:00:02 | 显示全部楼层 |阅读模式





    小型简易爬虫源码(java版)














    一,介绍:



             
       >这是我的第一个爬虫,比较简单,没有队列,广度优先算法等,用list集合代替了队列。
           >而且只爬取一个网址上面的图片,并不是将网址中的链接<href>加入队列,然后下载一个网址一个网址下载其中的图片。
           >不过,这是前期的,处于摸索阶段,后期学完队列和广算后,在涉及一点多线程,肯定会比想象中的更实用。






    二,代码:






    Start_Crawler类:



    1. package com.xhs.crawler;
    2. import java.util.Scanner;
    3. /**
    4. * @author XHS_12302
    5. * @version  1.0
    6. * @date  2017_07_11
    7. *
    8. *
    9. * @description 这是我的第一个爬虫,比较简单,没有队列,广度优先算法等,用list集合代替了队列。
    10. *              而且只爬取一个网址上面的图片,并不是将网址中的链接<href>加入队列,然后下载一个网址一个网址下载其中的图片。
    11. *              不过,这是前期的,处于摸索阶段,后期学完队列和广算后,在涉及一点多线程,肯定会比想象中的更实用
    12. */
    13. public class Start_Crawler {
    14.         public static void main(String[] args) {
    15.                 System.out.println("请输入网址:");
    16.                
    17.                 //获取用户要爬取的网址
    18.                 Scanner in=new Scanner(System.in);
    19.                 String url=in.next();
    20.                
    21.                 //通过用户的输入建立一个Get_Html的一个g对象
    22.                 Get_Html g=new Get_Html(url);
    23.                 //调用g中的get()方法模拟请求网站服务器,返回回应的字符串
    24.                 String htmlstr=g.get();
    25.                
    26.                 //建立一个Html_analyze对象ha用来分析服务器返回来的字符串
    27.                 Html_analyze ha=new Html_analyze(htmlstr);
    28.                
    29.                 /*for (String href :ha.analyzeHtmlHref()) {
    30.                         System.out.println(href);
    31.                 }*/
    32.                
    33.                 //调用ha.analyzeHtmlImage()方法将分析出来的图片地址放进list里面,传回来一个图片地址集合,
    34.                 //然后新建下载。
    35.                 new Download_pic().Download(ha.analyzeHtmlImage());
    36.                
    37.                 System.out.println("program has done!");
    38.                 in.close();
    39.         }
    40. }
    复制代码

    Get_HTML类:





    1. package com.xhs.crawler;
    2. import java.io.BufferedReader;
    3. import java.io.FileWriter;
    4. import java.io.IOException;
    5. import java.io.InputStream;
    6. import java.io.InputStreamReader;
    7. import java.net.HttpURLConnection;
    8. import java.net.URL;
    9. import java.net.URLConnection;
    10. public class Get_Html {
    11.         private String url_path;
    12.         private String htmlstr;
    13.         StringBuffer contentBuffer = new StringBuffer();
    14.         Get_Html(String url){
    15.                 this.url_path=url;
    16.         }
    17.         public String get(){
    18.                    FileWriter fw=null;
    19.                 try {
    20.                         fw=new FileWriter("C:\\Users\\Administrator\\Desktop\\crawler.txt");
    21.                         URL url=new URL(url_path);
    22.                         URLConnection hc=url.openConnection();
    23.                         hc.setConnectTimeout(5000);
    24.                         hc.setDoInput(true);
    25.                         ((HttpURLConnection) hc).setRequestMethod("GET");
    26.                         int returnCode=((HttpURLConnection) hc).getResponseCode();
    27.                         if(returnCode==200){
    28.                                 InputStream input=hc.getInputStream();
    29.                                
    30.                                  InputStreamReader istreamReader = new InputStreamReader(input, "utf-8");  
    31.                          BufferedReader buffStr = new BufferedReader(istreamReader);  
    32.                   
    33.                         String str = null;  
    34.                        while ((str = buffStr.readLine()) != null)
    35.                           contentBuffer.append(str);
    36.                           htmlstr=contentBuffer.toString();
    37.                   fw.write(htmlstr);
    38.                            input.close();
    39.                            istreamReader.close();
    40.                            buffStr.close();
    41.                            fw.close();
    42.                         }
    43.                 } catch (IOException e) {
    44.                         // TODO Auto-generated catch block
    45.                         e.printStackTrace();
    46.                 }
    47.                 return htmlstr;
    48.                
    49.         }
    50.        
    51.        
    52. }
    复制代码

    Html_analyze类:



    1. package com.xhs.crawler;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. import java.util.regex.Matcher;
    5. import java.util.regex.Pattern;
    6. public class Html_analyze {
    7.         private String src;
    8.         Html_analyze(String src){
    9.                 this.src=src;
    10.         }
    11.         public List<String> analyzeHtmlImage(){
    12.                 String regex="http[s]{0,1}://[^\\s]*\\.(jpg|bmp|png)";
    13.                 //String sr="http://img5.imgtn.bdimg.com/it/u=1380084653,2448555822&fm=26&gp=0.jpg";
    14.                 List<String> listImgUrl=new ArrayList<>();
    15.                 Pattern p=Pattern.compile(regex);
    16.                 Matcher m=p.matcher(src);
    17.                 while(m.find()){
    18.                         System.out.println(m.group());
    19.                         listImgUrl.add(m.group());
    20.                 }
    21.                 System.out.println("\n\n总共找到记录:"+listImgUrl.size()+"\n");
    22.                 return listImgUrl;
    23.         }
    24.         public List<String>  analyzeHtmlHref(){
    25.                 //分析href标签   并且加入listHref
    26.                 String regex="<a.*?href="(.*?)">";
    27.                 List<String> listHref=new ArrayList<>();
    28.                 Pattern p=Pattern.compile(regex);
    29.                 Matcher m=p.matcher(src);
    30.                 while(m.find()){
    31.                         listHref.add(m.group());
    32.                 }
    33.                 return listHref;
    34.         }
    35. }
    复制代码


    Download_pic类:





    1. package com.xhs.crawler;
    2. import java.io.File;
    3. import java.io.FileOutputStream;
    4. import java.io.IOException;
    5. import java.io.InputStream;
    6. import java.net.HttpURLConnection;
    7. import java.net.URL;
    8. import java.util.List;
    9. public class Download_pic {
    10.         public void Download(List<String> listImgSrc) {
    11.                 int count = 1;
    12.                 for (String url_path : listImgSrc) {
    13.                         InputStream in = null;
    14.                         FileOutputStream fo = null;
    15.                         String imageName = url_path.substring(
    16.                                         url_path.lastIndexOf("/") + 1, url_path.length());
    17.                         try {
    18.                                 byte[] data = new byte[500];// 1024
    19.                                 File f = new File(
    20.                                                 "C:\\Users\\Administrator\\Desktop\\crawler\");
    21.                                 if (!f.exists()) {
    22.                                         f.mkdir();
    23.                                 }
    24.                                 fo = new FileOutputStream(new File(f.getAbsolutePath() + "\"
    25.                                                 + imageName));
    26.                                 URL url = new URL(url_path);
    27.                                 HttpURLConnection con = (HttpURLConnection) url
    28.                                                 .openConnection();
    29.                                 con.setConnectTimeout(5000);
    30.                                 con.setDoInput(true);
    31.                                 con.setRequestMethod("GET");
    32.                                 // con.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
    33.                                 // 设置代理
    34.                                 int numCode = con.getResponseCode();
    35.                                 in = con.getInputStream();// int length
    36.                                 int lengthZ = 0;
    37.                                 if (numCode == 200) {
    38.                                         while ((lengthZ = in.read(data)) != -1) {
    39.                                                 fo.write(data, 0, lengthZ); // write(data,0,length);
    40.                                                 fo.flush();
    41.                                         }
    42.                                         System.out.println("下载成功:\t" + imageName + "\t剩余:\t"
    43.                                                         + (listImgSrc.size() - count));
    44.                                 } else {
    45.                                         System.out.println("访问失败,返回码不是200");
    46.                                 }
    47.                         } catch (Exception e) {
    48.                                 // TODO Auto-generated catch block
    49.                                 e.printStackTrace();
    50.                                 System.out.println(imageName + "下载失败");
    51.                         } finally {
    52.                                 try {
    53.                                         if (in != null)
    54.                                                 in.close();
    55.                                         if (fo != null)
    56.                                                 fo.close();
    57.                                         count++;
    58.                                 } catch (IOException e) {
    59.                                         // TODO Auto-generated catch block
    60.                                         // e.printStackTrace();
    61.                                         System.out.println("关闭流出现点问题··");
    62.                                 }
    63.                         }
    64.                 }
    65.         }
    66. }
    复制代码


    三:截图


















    这个只是简易的小东西,不过感觉挺好玩的。
           感兴趣的朋友可以自己试试,如果不能满足你要求,
                   这儿给你提供一种想法,你可以利用这种特性爬
                          取csdn博客文章访问量。^_^












    联系邮箱:xhsgg12302@outlook.com







                                                                                                                                                                                                                                                                                                                                                                   
    2017_07_11
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-24 08:06 , Processed in 0.361962 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表