爬虫基础

爬虫基础

  • 爬虫是什么
  • 爬虫的商业价值(爬虫对那些数据感兴趣)
  • 爬取的简单分类
  • 爬取的运行原理(*
  • 模拟浏览器发送HTTP请求
    • http协议(Header,相应状态码)
    • JDK原生的API进行网络请求(get和post)
      package cn.itcast.reptile;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

/**
* 使用 JDK的APi进行 get请求
* 1.在使用httpurlconnection时,默认就是get请求。如何改成post请求?
* 2.http协议中,可以指定header,想添加user-agent
*/

public class HttpGet {

public static void main(String[] args) throws Exception {

    //1.制定一个  url
    String domin="http://www.itcast.cn";
    //2.发起  一个请求
    URL url=new URL(domin);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    //3.添加  请求方式  默认  get请求
    conn.setRequestMethod("GET");
    //   3.2添加请求头
    conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0");
    //4..得到服务端返回的二进制数据
    InputStream inputStream = conn.getInputStream();
    //4.1将输入的流  转换字符串
    BufferedReader bufferReader= new BufferedReader(new  InputStreamReader(inputStream));
    //4.2一次 读取  bufferReader的数据
    String line=null;
    StringBuffer sb = new StringBuffer();
    while((line=bufferReader.readLine())!=null){
        sb.append(line);
    }
    System.out.println(sb.toString());
//关流
inputStream.close();
}   

}
* HttpClient进行网络请求(*
* 解析HTML文档
* Document 知道通过浏览器的console可以操作document
* Jsoup 解析html 选择器(*)
* 案例-登陆爬取
* 敲敲敲!!

爬虫是什么?

爬虫是一种运行在互联网上为了获取数据的自动化程序和脚本。
* 互联网的数据,有很多,一般都是根据业务需求来的。
* 网页(文字、图片、视频)
* 商品数据
* 怎么获取数据?
* HTTP协议
* 人的操是通过浏览器的,程序是利用网络请求的相关协议获取数据。
* 自动化,尽可能减少人工的干预。
* 爬虫开发的技术,没有限制的。
* python做网络爬虫是非常流行的。
* java 编写爬虫框架。

需求:公司有三个数据需求,评论(京东、淘宝、苏宁、国美、豆瓣、知乎、……),网页(新闻),商品(京东、淘宝、……),是写一个程序好,还是分别写多个程序好?
* 一个程序的理由
* 方便
* 抽取框架
* 效率高
* 多个程序的理由(通用)
* 简单,不要考虑封装
* 针对性强
* 效率高

在企业里面爬取的数据五花八门,种类繁多,如果是单一程序,涉及到不同网页的解析,不同数据的上下线问题,不同数据解析后的存储问题。随着爬取的数据越来越多,对爬虫程序的管理将边的越来越困难。不建议写一个程序。
针对每个数据需求开发不同的程序,便于上线先,便于管理和维护。

爬虫解决了什么问题?

爬虫是为获取数据而存在的。通过对数据的清洗,抽取,转换,将数据做成标准化的数据,然后进行数据分析和挖掘,得到数据的商业价值。

数据分为内部数据和外部数据。不管内部数据还是外部数据,其实都是为了获取用户数据。
拿到用户的行为数据之后,会分析用户,比如说电商类网站就是为推荐商品,搜索类的网站为了精准营销(家具类) 广告联盟。

用户的数据在企业中会有一个联盟,能够共享数据。

  • 内部数据:
    * 用户行为数据
  • 外部数据:
    • 用户行为数据
    • 基础信息(天眼查)
    • SDK 本质上是一个jar包

爬虫爬取数据的作用

  • 爬虫的数据与搜索引擎结合
  • 爬虫的数据用来做数据分析

人获取网页数据的步骤

  • 输入:http://www.163.com/
  • 浏览器发送了一个HTTP请求
  • 得到返回的新闻列表
    • 从所有的列表中,找到一个新闻链接
    • 浏览器发起请求 单个新闻
      • 复制(解析数据操作)
      • 粘贴(保存数据操作)

问题:一个网站中,所有的新闻详情页,可能会携带其它URL。如何避免在爬取的过程中,重复爬取。
问题:由一个URL产生多个URL之后,如果这些新产生的URL也需要被爬取,有一个先后顺序要考虑,还有如何存储这些新的URL。
存储的截止:List,SET

编写爬虫的步骤

  • 指定一个url,这个url是起始url。
  • 模拟浏览器发送请求
    • 使用HTTP协议发送(发起请求前,判断是否爬取过)
      • Socket client- socket server 非常底层,接触较少
      • http httpUrlconnection JDK 提供网络请求的api
      • httpclient 基于http协议的网络请求工具包,高度封装。不用关注网络的请求的细节。
        * 得到相应的结果集(二级制)
        * 将服务端返回的二进制数据流转化成字符串。
        其实字符串就是html源代码。
  • 解析HTML文档
    • HTML DOCUMENT
      • getElementByID/NAME/TAGNAME
    • Jsoup 为解析html文档而生
  • 保存html文档的数据
    • File文件类
    • 数据库(id,title,author,date,content,url)
    • redis (能)
    • 分布式文件系统(hadoop)

如何存储已经爬取过的URL?
如何快速快速判断
* 文件
* hashmap
* 数据库
* redis
* set

注意:每次爬取完的url一定要放到已经爬取过的容器
如何存储新的url
存储的截止:List,SET

爬虫原理

如何通过域名找到对应的服务器IP地址?

  • www.163.com
  • 首先找的本地的hosts文件
    • windows C:\Windows\System32\drivers\etc\HOSTS
    • linux /etc/hosts
  • 如何本地找不到,找DNS服务器
    • 一般大型公司都有自己的DNS服务器
    • 正常情况
      • 由宽带运营商提供的DNS服务器 114.114.114
        • 中国电信
          • 县城DNS
          • 市级DNS
          • 省级DNS
          • 骨干网络 DNS
          • ……
          • 顶级DNS服务器
      • 由第三方公司提欧共的DNS服务器 8.8.8.8

代码编写-模拟浏览器发送请求

  • http协议
    • get post
    • user-agent
    • 常见状态码
  • 使用JDK的api访问网络
    • get
      • 准备访问的url
      • 创建一个URL对象
        • 打开一个inputstream
        • 读取数据
    • post
      • 准备访问的url
      • 创建一个URL对象
        • post需要提交参数
          • setDoOutput()
        • 打开一个inputstream
        • 读取数据
  • httpclient工具包使用
    • httpclient 本质上是一个jar包。
    • maven依赖

代码编写-解析html文档

  • document
  • jsoup 为解析html而生

你可能感兴趣的:(javaEE,大数据,爬虫)