java爬虫抓取网页数据( 有没有什么轻便的框架供我们使用?什么框架?)

优采云 发布时间: 2022-03-18 05:08

  java爬虫抓取网页数据(

有没有什么轻便的框架供我们使用?什么框架?)

  Java 爬虫 (二)

  前言:在上一篇博客中,我们使用了基于HttpURLConnection的方法进行数据爬取

  Java爬虫(一),但是里面没有框架,通过原生http爬取,那么问题来了,有没有轻量级的框架给我们用?

  Jsoup是一个Java HTML解析器,可以直接解析一个URL地址和HTML文本内容。它提供了一个非常省力的API,可以通过DOM、CSS和类似jQuery的操作方法来检索和操作数据。本篇博客将主要介绍jsoup技术进行数据爬取,为了提高效率,我们将使用多线程的方式读取数据

  爬进入口

  我们随便找一个网站来爬取,原理是一样的,比如我们爬取一个国家统计局的数据,首先找到爬取到的网站的页面如下:

  

  比如我爬取天津的数据,找到要爬取的网站页面入口:

  http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2018/12.html

  爬行的想法

  其实爬虫的代码不用太在意。首先我们理清思路,上图:

  

  从上图可以看出我们的基本思路和流程,但是由于网站的可变性,我们不能贸然爬取,造成数据冗余。这个网页的最后一层只有文字信息,其余网页一条短信对应一条短信到一个URL地址,而在最后一层之外,每一层的数字和短信都有相同的URL,所以我们只需要爬取名字,如下:

  

  开始爬行

  请注意,我们的以下文档包路径是:

  import org.jsoup.nodes.Document;

  最终的项目目录结构如下:

  

  1.只需创建一个maven项目

  

  2.在pom.xml文件中添加如下依赖

  

org.jsoup

jsoup

1.11.3

  3.创建主类

  public class Main {

//待抓取的Url队列,全局共享

public static final LinkedBlockingQueue UrlQueue = new LinkedBlockingQueue();

public static final WormCore wormCore = new WormCore();

public static void main(String[] args) {

//要抓取的根URL

String rootUrl = "http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2018/12/1201.html";

//先把根URL加入URL队列

UrlQueue.offer(rootUrl);

Runnable runnable = new MyRunnable();

//开启固定大小的线程池,线程数为10

ExecutorService Fixed = Executors.newFixedThreadPool(10);

//开始爬取

for (int i = 0;i 3) {

System.out.println(element.text());

}

Flag++;

}

//普通页面的处理

}else {

for (Element element : elements) {

if (!Number.IsNumber(element.text())) {

Text.add(element.text());

System.out.println(element.text());

Urls.add(Before_Url + element.attr("href"));

}

}

}

//把文本集合和URL集合装到Map中返回

Message.put("text",Text);

Message.put("Url",Urls);

return Message;

}

}

  由于最后一页与上一页不同,需要因地制宜地调整措施。我们把前面提到的统计划分码号扔掉了,只要名字是必填的,所以博主通过下面Number类中的方法来判断

  8.判断是否为数字

<p>public class Number {

public static boolean IsNumber(String str){

for(int i=0;i=48 && c

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线