爬虫?爬虫?

作者: 憧憬着的未来 | 来源:发表于2017-08-06 15:54 被阅读10次

前言

当一个项目完成的时候,我们需要进行测试,但是测试的时候测试的数据怎么来呢?比如类似于携程酒店搜索的页面,怎么去找一些酒店的简单信息和描述信息呢?我们可以通过瞎编,这样其实最简单,没有什么要求,我们还可以通过写一些脚本去这些现成的网站上去抓取一些数据下来,岂不美哉?

思路

通过Java中的HTML相关操作类通过一些网页上源代码中的共同点将我们需要的数据抓取下,进行展示。

开发环境

  • Java1.8.0
  • Maven 3.5
  • Tomcat 7.0

基本知识

  • URL类
    java.net.URL创建一个URL对象
URL urlObj = new URL(String url); //通过一个绝对资源的绝对地址,创建一个URL的对象指向这个资源 
  • URLConnection类
    java.net.URLConnection通过一个URL对象创建一个request请求
URLConnection urlConnection = urlObj.openConnection();
  • IO流
    主要使用InputStreamReader和BufferedReader这两个类
  • Jsoup类
    将一个HTML文件转换成一个Document对象
  • Document类
    相当于js中的document对象
  • Elements类
    HTML中element的集合
  • Element类
    HTML中的节点对象

核心方法

  • 通过一个网页的URL和对应的编码获取到改网页的源代码
public static String getHtmlResourceByUrl(String url, String encoding) {
        //return urlResource
        StringBuilder urlResource = new StringBuilder();
        //io
        InputStreamReader inReader = null;
        try {
            //create connection
            URL urlObj = new URL(url);
            //open connection
            URLConnection urlConnection = urlObj.openConnection();
            //get resource inputstreamReader
            inReader = new InputStreamReader(urlConnection.getInputStream(), encoding);
            //create cache
            BufferedReader bufferReader = new BufferedReader(inReader);
            //line of resource
            String line = "";
            while(null != (line=bufferReader.readLine())) {
                urlResource.append(line).append("\n");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(null != inReader) {
                try {
                    inReader.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return urlResource.toString();
    }
  • 通过一个网页的URL和对应的编码筛选到需要的信息
public static List<Map<String, String>> getHtmlDataByUrl(String url, String encoding) {
        List<Map<String, String>> hotelMapList = new ArrayList<Map<String, String>>();
        //get htmlResource
        String htmlResource = getHtmlResourceByUrl(url, encoding);
        //analysis htmlResource
        Document document = Jsoup.parse(htmlResource);
        //get hotel list
        Elements hotelList = document.getElementsByClass("searchresult_list");
        //get hotel message, put it to a map and add to hotelMapList
        for(Element hotel : hotelList) {
            Map<String, String> hotelMap = new HashMap<String, String>();
            String hotelImgUrl = hotel.getElementsByTag("img").attr("src");
            String hotelTitle = hotel.getElementsByTag("img").attr("alt");
            String hotelDescribe = hotel.getElementsByClass("searchresult_htladdress").text();
            hotelMap.put("hotelImgUrl", hotelImgUrl);
            hotelMap.put("hotelTitle", hotelTitle);
            hotelMap.put("hotelDescribe", hotelDescribe);
            hotelMapList.add(hotelMap);
        }
        return hotelMapList;
        
    }

总结

两个方法都很简单,第一个方法应该没有什么问题,但是第二个方法局限性太强,这次是针对于携程酒店查询的页面数据,但是如果我想去抓取美团酒店页面的数据就不能成功了,因为每一个页面的布局都是不同的,这种抓取的方式只能针对一种页面,如果页面改变了,就需要按照改变后的页面布局去改变代码才能完成抓取。

相关文章

  • 11.20-11.26

    本周目标 爬虫 爬虫 爬虫 爬虫

  • 爬虫入门基础

    Day01 一、爬虫介绍 什么是爬虫 Python爬虫的优势 Python爬虫需要掌握什么 爬虫与反爬虫与反反爬虫...

  • 01-认识爬虫

    一、爬虫介绍 什么是爬虫 Python爬虫的优势 Python爬虫需要掌握什么 爬虫与反爬虫与反反爬虫三角之争 网...

  • 爬虫原理与数据抓取之一: 通用爬虫和聚焦爬虫

    通用爬虫和聚焦爬虫 根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种. 通用爬虫 通用网络爬虫 是 捜索...

  • (了解)通用爬虫和聚焦爬虫--爬虫基础教程(python)(二)

    通用爬虫和聚焦爬虫 根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种.我们主要写通用爬虫。 通用爬虫 通...

  • Python 网络爬虫(一)

    网络爬虫的基本介绍 学习爬虫,我想主要从以下几个方面来切入 -爬虫的原理? -爬虫的作用? -爬虫的实现? -爬虫...

  • 7.爬虫概述

    爬虫概述 知识点: 了解 爬虫的概念 了解 爬虫的作用 了解 爬虫的分类 掌握 爬虫的流程 1. 爬虫的概念 模拟...

  • 1-基本概念

    简介 为什么选择Python做爬虫 需要技能 爬虫与反爬虫 网络爬虫类型 通用网络爬虫 聚焦网络爬虫 增量式网络爬...

  • 认识爬虫

    前言 我的爬虫笔记 经常看别人通过爬虫分析数据,很有意思,来了兴趣,就开始了爬虫之路。 爬虫 爬虫,即网络爬虫,大...

  • 爬虫入门

    为什么要学习爬虫? Python做爬虫优势 关于Python网络爬虫,我们需要学习的有: 什么是爬虫? 网络爬虫(...

网友评论

  • mmlmml:如果没有web端,只有app端.考虑一下怎么抓.

本文标题:爬虫?爬虫?

本文链接:https://www.haomeiwen.com/subject/tsbglxtx.html