Java 爬虫 A8站源码交易平台

摘要: int start;//每页多少条 int total = 0;//记载数 int end = 9979;//一共9979条数据 for (start = 0; start

A8站源码交易平台

为什么我们要爬取数据

在大数据年代,我们要获取更多数据,就要进行数据的发掘、剖析、挑选,比方当咱们做一个项目的时分,需求很多实在的数据的时分,就需求去某些网站进行爬取,有些网站的数据爬取后保存到数据库还不能够直接运用,需求进行清洗、过滤后才干运用,咱们知道有些数据是十分真贵的。A8站源码交易平台

剖析豆瓣电影网站
我们运用Chrome浏览器去访问豆瓣的网站如

1.png
https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0

在Chrome浏览器的network中会得到如下的数据

能够看到地址栏上的参数type=movie&tag=抢手&sort=recommend&page_limit=20&page_start=0
其间type是电影tag是标签,sort是依照抢手进行排序的,page_limit是每页20条数据,page_start是从第几页开端查询。
可是这不是咱们想要的,咱们需求去找豆瓣电影数据的总进口地址是下面这个   A8站源码交易平台

https://movie.douban.com/tag/#/

我们再次的去访问恳求总算拿到了豆瓣的电影数据如下图所示

2.png


在看下恳求头信息

3.png


4.png


最终我们确认了爬取的进口为:

https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=&start=0

创立Maven项目开端爬取


我们创立一个maven工程,如下图所示
5.png



maven工程的依靠,这儿仅仅爬取数据,所以没有必要运用Spring,这儿运用的数据耐久层结构是mybatis 数据库用的是mysql,下面是maven的依靠  A8站源码交易平台


   

     org.json
     json
     20160810
   

   
     com.alibaba
     fastjson
     1.2.47
   

   
     mysql
     mysql-connector-java
     5.1.47
   

   
     org.mybatis
     mybatis
     3.5.1
   

   
     junit
     junit
     4.12
   
 

--------------


创立好之后,结构如下所示

6.png


首要咱们在model包中树立实体目标,字段和豆瓣电影的字段相同,便是恳求豆瓣电影的json目标里边的字段
7.png



Movie实体类

public class Movie {

    private String id; //电影的id
    private String  directors;//导演
    private String title;//标题
    private String cover;//封面
    private String rate;//评分
    private String casts;//艺人


    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getDirectors() {
        return directors;
    }

    public void setDirectors(String directors) {
        this.directors = directors;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getCover() {
        return cover;
    }

    public void setCover(String cover) {
        this.cover = cover;
    }

    public String getRate() {
        return rate;
    }

    public void setRate(String rate) {
        this.rate = rate;
    }

    public String getCasts() {
        return casts;
    }

    public void setCasts(String casts) {
        this.casts = casts;
    }
}

-----------

这儿留意的是导演和艺人是多个人我没有直接处理,这儿应该是一个数组目标。

创立mapper接口

public interface MovieMapper {

    void insert(Movie movie);
    
    ListfindAll();
}

-----------


在resources下创立数据衔接配置文件jdbc.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/huadi
username=root
password=root
1
2
3
4
创立mybatis配置文件 mybatis-config.xml


 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

   

-------------


创立mapper.xml映射文件

        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">


      INSERT INTO movie(id,title,cover,rate,casts,directors)

        VALUES
        (#{id},#{title},#{cover},#{rate},#{casts},#{directors})
   
   
        SELECT * FROM movie
   

-----------


因为这儿没有用任何的第三方爬虫结构,用的是原生Java的Http协议进行爬取的,所以我写了一个东西类

A8站源码交易平台



public class GetJson {
    public JSONObject getHttpJson(String url, int comefrom) throws Exception {
        try {
            URL realUrl = new URL(url);
            HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 树立实践的衔接
            connection.connect();
            //恳求成功
            if (connection.getResponseCode() == 200) {
                InputStream is = connection.getInputStream();
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                //10MB的缓存
                byte[] buffer = new byte[10485760];
                int len = 0;
                while ((len = is.read(buffer)) != -1) {
                    baos.write(buffer, 0, len);
                }
                String jsonString = baos.toString();
                baos.close();
                is.close();
                //转换成json数据处理
                // getHttpJson函数的后边的参数1,表明回来的是json数据,2表明http接口的数据在一个()中的数据
                JSONObject jsonArray = getJsonString(jsonString, comefrom);
                return jsonArray;
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return null;
    }

    public JSONObject getJsonString(String str, int comefrom) throws Exception{
        JSONObject jo = null;
        if(comefrom==1){
            return new JSONObject(str);
        }else if(comefrom==2){
            int indexStart = 0;
            //字符处理
            for(int i=0;i<str.length();i++){
                 if(str.charAt(i)=='('){
                    indexStart = i;
                    break;
                }
            }
            String strNew = "";
            //切割字符串
            for(int i=indexStart+1;i<str.length()-1;i++){
                 strNew += str.charAt(i);
            }
            return new JSONObject(strNew);
        }
        return jo;
    }

}
------------
爬取豆瓣电影的发动类

public class Main {
    public static  void  main(String [] args) {

        String resource = "mybatis-config.xml"; 界说配置文件途径
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);//读取配置文件
        } catch (IOException e) {
            e.printStackTrace();
        }

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//注册mybatis 工厂

        SqlSession sqlSession = sqlSessionFactory.openSession();//得到衔接目标

        MovieMapper movieMapper = sqlSession.getMapper(MovieMapper.class);//从mybatis中得到dao目标

        int start;//每页多少条
        int total = 0;//记载数
        int end = 9979;//一共9979条数据
        for (start  = 0; start <= end; start += 20)  {
            try {

                String address = "https://Movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=&start=" + start;

                JSONObject dayLine = new GetJson().getHttpJson(address, 1);

                    System.out.println("start:" + start);
                    JSONArray json = dayLine.getJSONArray("data");
                    Listlist = JSON.parseArray(json.toString(), Movie.class);

                    if (start <= end){
                        System.out.println("现已爬取究竟了");
                        sqlSession.close();
                    }
                    for (Movie movie : list) {
                        movieMapper.insert(movie);
                        sqlSession.commit();
                    }
                    total += list.size();
                    System.out.println("正在爬取中---共抓取:" + total + "条数据");

            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    }

}


--------------

最终咱们运即将一切的数据刺进到数据库中。A8站源码交易平台

8.png


项目地址

github


总结
爬取豆瓣网站十分的轻松,每页任何的难度,需求留意的是便是start是每页多少条咱们发现规矩当start=0的时分是20条数据是从0到19条,就这样每次加20条直到爬取完。



A8站源码交易平台


  • 全部评论(0)
最新发布的资讯信息
【A8站-免费源码分享|直播源码】直播系统源码开发:关于安卓开发工具和obs直播推流(2020-10-30 09:41)
【计算机/互联网|】【独家修复】用户定制版短视频点赞系统,支持抖音+快手+刷宝+微视等所有主流短视频评论系统源码(2020-10-26 16:34)
【技术宅-为技术而疯|网站架设教程】【独家首发】最新更新已对接短信2020全新抖音快手点赞任务系统霸屏天下小红书头条威客兼职完整搭建架设视频教程(2020-10-25 13:56)
【技术宅-为技术而疯|网站架设教程】最新可用个人发卡网系统源码完整搭建架设视频教程(2020-10-25 10:53)
【技术宅-为技术而疯|网站架设教程】独家更新全新V10抢单系统唯品会京东淘宝自动抢单区块系统源码全开源抢单收单接单返利+搭建架设完整视频教程(2020-10-25 10:52)
【计算机/互联网|】柔丫纸尿裤云仓系统源码部署(2020-10-15 18:13)
【计算机/互联网|】侏罗纪软件模式定制开发(2020-10-14 15:33)
【计算机/互联网|】S2b2C供应商系统 营销闭环(2020-10-10 17:46)
【计算机/互联网|程序设计开发】盛都汇系统奖励机制(2020-10-10 17:20)
【A8站-免费源码分享|网站源码】积分商城系统APP开发(2020-09-23 14:56)
联系我们
Q Q:3101359898 点击直接对话
电话:18580901894
邮箱:admin#a8zhan.com
时间:09:00 - 24:00
手机二维码 访问手机版
返回顶部