`
wx1569110409
  • 浏览: 18720 次
文章分类
社区版块
存档分类
最新评论

爬虫

 
阅读更多

                       

1. [代码]主程序    

           

?

1
2
3
4
5
6
7
8
9
10
11
public class Demo {
     @SuppressWarnings ( "static-access" )
     public static void main(String[] args) {
         MyCrawler crawler = MyCrawler.getInstance();
         crawler.setUrl( "http://docs.oracle.com/javase/8/docs/api/" );
         crawler.setDir( "/api2" );
         crawler.setDeep( 3 );
         crawler.setThread( 1 );
         crawler.start();
     }
}

                   

                       

                       

2. [代码]数据参数处理    

           

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public class MyCrawler {
     private static String url;
     private static int deep = 4 ;
     private static int topN = 10 ;
     private static int thread = 3 ;
     private static String host;
     private static String dir = System.getProperty( "user.dir" );
     private static MyCrawler crawler = new MyCrawler();
     public static MyCrawler getInstance(){
         return crawler;
     }
     private MyCrawler(){}
     public static int getDeep() {
         return deep;
     }
     public static void setDeep( int deep) {
         MyCrawler.deep = deep;
     }
     public static int getTopN() {
         return topN;
     }
     public static void setTopN( int topN) {
         MyCrawler.topN = topN;
     }
     public static String getUrl() {
         return url;
     }
     public static void setUrl(String url) {
         MyCrawler.url = url;
         if (url.endsWith( ".html" )){
             host = url.substring( 0 , url.lastIndexOf( "/" ));
         } else {
             MyCrawler.host = url;
         }
     }
     public static String getHost() {
         return host;
     }
     public static String getDir() {
         return dir;
     }  
     public void start() {
         UrlObject obj = new UrlObject(url);
         obj.setIdeep( 1 );
         QueryCrawler.push(obj);
         CrawlerWriterFiles writer = new CrawlerWriterFiles();
         writer.open();
     }
     public static void setDir(String dir) {
         MyCrawler.dir += dir+ "\\" ;
     }
     public static int getThread() {
         return MyCrawler.thread;
     }
     public static void setThread( int thread) {
         MyCrawler.thread = thread;
     }
}

                   

                       

                       

3. [代码]url对象    

           

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class UrlObject {
     private String url;
     private int ideep;
     public UrlObject(String url) {
         this .url = url;
     }
     public String getUrl() {
         return url;
     }
     public void setUrl(String url) {
         this .url = url;
     }
     public int getIdeep() {
         return ideep;
     }
     public void setIdeep( int ideep) {
         this .ideep = ideep;
     }
     public UrlObject(String url, int ideep) {
         this .url = url;
         this .ideep = ideep;
     }  
}

                   

                       

                       

4. [代码]url任务队列    

           

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class QueryCrawler {
     private static QueryCrawler query = new QueryCrawler();
     private static ArrayList<UrlObject> list = new ArrayList<UrlObject>();
     private QueryCrawler(){}
     public static QueryCrawler getInstance() {
         return query;
     }
     public synchronized static void push(UrlObject obj) {
         list.add(obj);
     }
     public synchronized static void push(List<UrlObject> objs) {
         list.addAll(objs);
     }
     public synchronized static UrlObject pop() {
         if (list.size() < 1 )
             return null ;
         return list.remove( 0 );
     }
}

                   

                       

                       

5. [代码]线程遍历抓取,存储    

           

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public class CrawlerWriterFiles {
     public void open() {
         for ( int i = 0 ; i < MyCrawler.getThread(); i++) {
             new Thread( new Runnable() {
                 public void run() {
                     while ( true ){
                         try {
                             DefaultHttpClient client = new SystemDefaultHttpClient();
                             final UrlObject obj = QueryCrawler.pop();
                             if (obj != null ){
                                 HttpPost httpPost = new HttpPost(obj.getUrl());
                                 HttpResponse response = client.execute(httpPost);
                                 final String result = EntityUtils.toString(response.getEntity(), "UTF-8" );
                                 if (obj.getIdeep() < MyCrawler.getDeep() && !obj.getUrl().endsWith( ".css" )){
                                     CrawlerUtil.addUrlObject(obj, result);
                                 }
                                 new Thread( new Runnable() {
                                     public void run() {
                                         try {                                          
                                             CrawlerUtil.writer(obj.getUrl(), result);
                                         } catch (IOException e) {
                                             System.err.println( "输出错误url:" +obj.getUrl());
                                         }
                                     }
                                 }).start();
                             } else {
                                 System.out.println( "--------暂时没有任务!!" );
                                 Thread.sleep( 5000 );                            
                             }
                         } catch (Exception e) {
                             e.printStackTrace();
                             System.err.println( "error" );
                         }
                     }              
                 }
                 
             }).start();
         }              
     }  
}

                   

                       

                       

6. [代码]抓取url,存储页面数据    

           

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
public class CrawlerUtil {
     private static List<String> arrays = new ArrayList<String>();
     private static List<String> filearrays = new ArrayList<String>();
     static {
         String a = ",[]'\"+:;{}" ;
         String[] as = a.split( "" );
         for ( int i = 0 ; i < as.length; i++) {
             if (as[i].equals( "" )){
                 continue ;
             }
             arrays.add(as[i]);
         }
         filearrays.add( "?" );
         filearrays.add( "=" );
         //filearrays.add(".");
     }
     public static void writer(String url, String data) throws IOException {
         File file = null ;
         if (url.toLowerCase().endsWith( ".css" )){
             file = new File(getPathCSS(url));
         } else {
             file = new File(getPathHTML(url));
         }
         System.out.println(file.getPath());
         if (!file.getParentFile().exists()){
             file.getParentFile().mkdirs();
         }
         if (!file.exists()){
             byte [] datab = data.getBytes();
             FileOutputStream f = new FileOutputStream(file);
             f.write(datab, 0 , datab.length);
             f.close();
         }
     }
 
     private static String getPathHTML(String url) {
         if (url.equals(MyCrawler.getHost())){
             url += "index" ;
         }
         if (!url.endsWith( "html" )){
             if (url.endsWith( "/" )){
                 url+= "index.html" ;
             } else if (url.lastIndexOf( "/" ) < url.lastIndexOf( "." )) {
                 url = url.substring( 0 , url.lastIndexOf( "." )) + ".html" ;
             } else {
                 url += ".html" ;
             }
         }
         if (url.startsWith( "http://" )){
             url = MyCrawler.getDir() + url.replace(MyCrawler.getHost(), "" );
         }      
         for ( int i = 0 ; i < filearrays.size(); i++) {
             url = url.replaceAll( "\\" +filearrays.get(i)+ "" , "_" );
         }
         return url;
     }
     private static String getPathCSS(String url) {     
         if (url.startsWith( "http://" )){
             url = MyCrawler.getDir() + url.replace(MyCrawler.getHost(), "" );
         }      
         return url;
     }
 
     public static void addUrlObject(UrlObject obj, String result) {
         //"<a\\s+href\\s*=\\s*\"?(.*?)[\"|>]"
         Pattern pcss =Pattern.compile( "<link.*href\\s*=\\s*\"?(.*?)[\"|>]" ,Pattern.CASE_INSENSITIVE);
         addUrlObjToPattern(pcss, obj, result);
         Pattern pa =Pattern.compile( "<a\\s+href\\s*=\\s*\"?(.*?)[\"|>]" ,Pattern.CASE_INSENSITIVE);
         addUrlObjToPattern(pa, obj, result);
         Pattern pframe =Pattern.compile( "<frame\\s+src\\s*=\\s*\"?(.*?)[\"|>]" ,Pattern.CASE_INSENSITIVE);
         addUrlObjToPattern(pframe, obj, result);
     }
     private static void addUrlObjToPattern(Pattern p, UrlObject obj,
             String result) {
         Matcher m = p.matcher(result);
         ArrayList<UrlObject> urlobjs = new ArrayList<UrlObject>();
         while (m.find()){
             String link = m.group( 1 ).trim();
             //urlobjs.add(new UrlObject(link, 1+obj.getIdeep()));
             if (!isLink(link)){
                 continue ;
             }
             if (link.startsWith(MyCrawler.getHost())){
                 urlobjs.add( new UrlObject(link, 1 +obj.getIdeep()));
             } else if (!link.contains( "://" )){
                 urlobjs.add( new UrlObject(MyCrawler.getHost() + link, 1 +obj.getIdeep()));
             }
         }
         QueryCrawler.push(urlobjs);
         show(urlobjs);
     }
 
     private static void show(ArrayList<UrlObject> urlobjs) {
         /*for (int i = 0; i < urlobjs.size(); i++) {
             System.out.println(urlobjs.get(i).getUrl());
         }*/    
     }
 
     private static boolean isLink(String link) {
         if ( null == link) return false ;
         link = link.replace(MyCrawler.getHost(), "" );
         for ( int i = 0 ; i < arrays.size(); i++) {
             if (link.contains(arrays.get(i))){
                 return false ;
             }
         }
         return true ;
     }
}

                   

                       

                       

7. [图片] 官网.png    

           

12213640_8aAj.png

                       

                       

                       

8. [图片] 自己抓取得.png    

           

12213706_2by6.png

                       


转载于:https://my.oschina.net/Denniswang/blog/661926

分享到:
评论

相关推荐

    网站图片爬虫小工具 网站图片爬虫小工具

    网站图片爬虫小工具网站图片爬虫小工具网站图片爬虫小工具网站图片爬虫小工具网站图片爬虫小工具网站图片爬虫小工具网站图片爬虫小工具网站图片爬虫小工具网站图片爬虫小工具网站图片爬虫小工具网站图片爬虫小工具...

    爬虫_爬虫_医院数据爬虫_

    "爬虫_爬虫_医院数据爬虫_"这个标题暗示了我们将会探讨的是一个专门针对医院数据的网络爬虫项目。这类爬虫的目标是收集医疗行业的相关数据,如医院的科室信息、医生的专业资质、就诊时间、预约挂号情况等,以便进行...

    网络爬虫爬虫软件

    需要加载一个字典文件,此字典文件在爬虫程序中要求放在此目录结构下: c:\dictionary\dictionary.txt,词典默认认为是按照词语长到短的顺序排列的 2、此爬虫程序爬到的网页内容存储到数据库中,运用的是SQL Server ...

    TVBoxOSC 服务端爬虫 .zip

    爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的...

    秀人网爬虫 55156爬虫.zip

    爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的...

    闲鱼商品爬虫,xianyu.zip

    爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的...

    使用feapder爬虫框架开发的爬虫示例.zip

    爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的...

    java爬虫登录验证码解析.zip

    反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等...

    东方财富网股吧爬虫.zip

    爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的...

    信用中国爬虫.zip

    爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的...

    python爬虫代码源码.rar

    python爬虫程序可用于收集数据。这也是最直接和最常用的方法。由于爬虫程序是一个程序,程序运行得非常快,不会因为重复的事情而感到疲倦,因此使用爬虫程序获取大量数据变得非常简单和快速。 由于99%以上的网站是...

    简单的闲鱼爬虫.zip

    爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的...

    Python爬虫进阶 JS 解密逆向实战.zip

    爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的...

    81个Python爬虫源代码+九款开源爬虫工具.doc

    Python爬虫技术是数据获取和分析领域的重要工具,尤其在互联网信息海量的今天,爬虫可以帮助我们自动化地从网站上抓取大量数据。以下是一些关于Python爬虫的知识点,以及提到的一些开源爬虫工具: 1. **Python爬虫...

    天眼查 Python爬虫项目源码.zip

    天眼查 Python爬虫。 input.csv 要查找的企业名字 output.csv 一些基本信息输出 运行爬虫:python crawl.py ps:天眼查需要登陆后才能查看一些信息,所以这里要用到cookies,使用该爬虫时,先到代码里填写cookie...

    Java-全国招标网站爬虫.zip

    反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等...

    裁判文书爬虫Python版.zip

    爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的...

    网络爬虫.论文答辩PPT

    网络爬虫是一种自动获取网页信息的技术,它模拟人类浏览网页的行为,通过编程方式遍历互联网上的页面,收集所需数据。在网络爬虫的论文答辩PPT中,主要涉及以下几个知识点: 1. **网络爬虫的基本原理**:网络爬虫...

    解析Python网络爬虫:核心技术、Scrapy框架、分布式爬虫全套教学资料

    Python网络爬虫是一种用于自动化网页数据抓取的技术,它能够高效地从互联网上获取大量信息。本套教学资料深入解析了Python爬虫的核心技术、Scrapy框架以及分布式爬虫的实现,旨在帮助学习者掌握这一领域的核心技能。...

    爬取人民网新闻爬虫.zip

    反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等...

Global site tag (gtag.js) - Google Analytics