爬虫基础

1、爬虫的概念

爬虫是什么

爬虫又叫网络爬虫,是一种运行在互联网上为了获取数据的自动化程序。

爬虫简单的分类

百度 互联网所有的 通用爬虫

为做数据分析而存在的爬虫, 垂直爬虫。

淘宝评论爬虫

淘宝商品爬虫

分类的标准:根据数据量或者业务范围

在互联网上,大多数都是垂直爬虫,也就是值爬取一定范围内的数据。

爬虫爬取一个页面的流程

  1. 指定一个URL
  2. 发起一个网络请求 HTTP
  3. 得到一个HTML文档
  4. 解析HTML文档

爬虫爬取多个页面

1)指定很多个URL数据结构 list

2)从list中依次拿取url

    i.发起一个网络请求 HTTP
    ii.得到一个HTML文档
    iii.解析HTML文档
        1.顺便解析出其他URL
        2.将解析的URL存放到等待爬取的URL中

爬虫基础_第1张图片

1)给定一个或者多个URL,将这个URL存放到等待抓取的URL队列
2)从队列中读取一个URL  http://www.itcast.cn/xxx.html
3)域名解析 得到IP地址
4)发起HTTP请求
5)得到相应的HTML文档
6)解析HMTL文档
    a)解析内容
    b)解析新的URL

2、使用HttpClient访问网络

开发前的准备工作

  • 1、创建maven项目
  • 2、导入依赖
 <dependency>
  <groupId>org.apache.httpcomponentsgroupId>
  <artifactId>httpclientartifactId>
  <version>4.5.3version>
dependency>
  • 导入fluent的依赖
    <dependency>
        <groupId>org.apache.httpcomponentsgroupId>
        <artifactId>fluent-hcartifactId>
        <version>4.5.3version>
    dependency>

使用HttpClient进行GET请求Demo


import java.nio.charset.Charset;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class HttpClientGet {
    public static void main(String[] args) throws Exception {
        // 1. 指定一个url
        String url="http://www.163.com";
        // 2. 创建一个默认的HttpClient
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 如果想设置Header 
        httpGet.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36");
        // 3. 如过是get请求,创建一个get对象
        HttpGet httpGet=new HttpGet(url);
        // 4. 发起请求
        CloseableHttpResponse response = httpClient.execute(httpGet);
        // 5. 获取数据
        HttpEntity entity = response.getEntity();
        // 6. 打印数据
        String entityDate = EntityUtils.toString(entity, Charset.forName("utf-8"));

        System.out.println(entityDate); 
    }
}

使用HttpClient进行POST请求Demo

import java.nio.charset.Charset;
import java.util.ArrayList;

import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

public class HttpClientPost {

    public static void main(String[] args) throws Exception {
        //1.指定一个url 
        String url="http://www.itcast.cn/login.html";

        // 2. 创建一个默认的HttpClient
        CloseableHttpClient httpClient = HttpClients.createDefault();

        // 3. 如过是post请求,创建一个post对象
        HttpPost httpPost=new HttpPost(url);

        //4设置参数
        ArrayList parameters=new ArrayList();
        parameters.add(new BasicNameValuePair("username","DHC"));
        parameters.add(new BasicNameValuePair("password", "123"));
        httpPost.setEntity(new UrlEncodedFormEntity(parameters));
        // 5. 发起请求
        CloseableHttpResponse response = httpClient.execute(httpPost);
        //6.获取信息
        String charsetEntity = EntityUtils.toString(response.getEntity(), Charset.forName("utf-8"));;
        System.out.println(charsetEntity.toString());

    }

}

3、使用JSOUP工具包解析HTML

创建maven项目

  • 引入jsoup依赖
        <dependency>
            <groupId>org.jsoupgroupId>
            <artifactId>jsoupartifactId>
            <version>1.10.3version>
        dependency>

jsoup解析html的语法

爬虫基础_第2张图片

JSOUP工具包解析HTML的Demo


import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JsoupTest {
    public static void main(String[] args) throws Exception {
        // 得到一个HTML文档
        // httpclient.execute(httpget);
        Document document = Jsoup.parse(new URL("http://www.itcast.cn"), 10 * 1000);
        //获取title
        Elements titles = document.select("title");
        for (Element element : titles) {
            System.out.println(element.ownText());
        }
        // meta
        Elements metas = document.select("meta");
        for (Element element : metas) {
            System.out.println(element.attr("name")+element.attr("content"));
        }
        // 获取所有的a标签
        Elements aTags = document.select("a[href=http://yun.itheima.com/course]");
        for (Element element : aTags) {
            System.out.println(element);
        }

        Elements banners = document.select(".info");
        for (Element element : banners) {
            System.out.println(element);
        }

        Elements atags = document.select("a[^cla]");
        for (Element element : atags) {
            System.out.println(element);
        }

        atags = document.select("ul[class=nav_txt]");
        for (Element element : atags) {
            System.out.println(element);
        }
        atags = document.select("[class^=nav]");
        for (Element element : atags) {
            System.out.println(element);
        }

        atags = document.select("div.ban_up");
        for (Element element : atags) {
            System.out.println(element);
        }
    }

}


你可能感兴趣的:(java,爬虫)