java 爬取网页数据 多页爬取 jsoup 和 httpClient 实现

预览结果视图

 

目录

预览结果视图

介绍

代码

依赖

爬取网页数据代码

解析代码

解析介绍

完整代码


 

介绍

1.爬取通过org.jsoup 和HttpClients实现

2.爬取多页内容的时候进行循环,多页进行爬取

3.爬取来数据解析到jsonoup

4.取回数据使用文件保存直接保存到本地

5.文件保存成excel 可以产考我的另一篇文章 https://yushen.blog.csdn.net/article/details/111580547

6.最后直接用完整代码即可

 

代码

依赖


import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

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;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.alibaba.fastjson.JSONArray;

调用循环代码

/**
	 * 爬取 任务 001 爬取xx数据
	 * 	爬取xx网高中xx学xx版本100页数据
	 * 
	 * @param url
	 * @throws InterruptedException 
	 */
	public static void crawlingTask001() throws InterruptedException {

		// ----------------------------------代办任务开始--------------------------

		// 爬取xx网 试卷栏目 文字版 其他选项不限
	
		// 创建存储
		List<List<String>> list0 = new ArrayList<List<String>>();

		// ----------------------------------爬取,任务--------------------------

		System.out.println(new Date() + "爬取,任务执行开始!");

		// 爬取数据
		for (int i = 1; i < 2; i++) {
			Thread.sleep(500);
			String url = "https://www.xx.com/sf/vsearch?pd=igI&rsv_bp=1&f=8&async=1&pn="+ i;
			List<String> list = crawlingData(url);
			list0.add(list);
		}
		System.out.println(new Date() + "爬取,任务执行完毕!");

		
		// ----------------------------------读取爬取数据,任务--------------------------
		System.out.println(new Date() + "读取爬取数据,任务执行开始!");

		JSONArray ja = new JSONArray();
		// 读取数据
		for (int i = 0; i < list0.size(); i++) {

			List<String> list01 = list0.get(i);
			System.out.println("第:" + (i + 1) + "页内容,共计:" + list01.size() + "条数据!");
			for (int j = 0; j < list01.size(); j++) {
				System.out.println(j + "号文件地址:" + list01.get(j));
				ja.add(list01.get(j));
				// TODO 1.之后这里进行对每个页面进行读取 2.获取文件内容中图片 3.下载到本地 并生成对应文件夹河对应word文档中
			}
		}
		System.out.println(new Date() + "读取爬取数据,任务执行完毕!");

		
		// ----------------------------------数据存入持久化磁盘,任务--------------------------
		System.out.println(new Date() + "数据存入持久化磁盘,任务执行开始!");
		spider(ja); 
		System.out.println(new Date() + "数据存入持久化磁盘,任务执行完毕!");

				
				
		// ----------------------------------代办任务结束--------------------------

		
	}

 

爬取网页数据代码

// 根据url地址获取对应页面的HTML内容,我们将上一节中的内容打包成了一个方法,方便调用
	public static String getHTMLContent(String url) throws IOException {
		// 建立一个新的请求客户端
		CloseableHttpClient httpClient = HttpClients.createDefault();
		// 使用HttpGet方式请求网址
		HttpGet httpGet = new HttpGet(url);
		httpGet.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0"); // 设置请求头消息User-Agent
		// 获取网址的返回结果
		CloseableHttpResponse response = httpClient.execute(httpGet);
		// 获取返回结果中的实体
		HttpEntity entity = response.getEntity();
		String content = EntityUtils.toString(entity);
		// 关闭HttpEntity流
		EntityUtils.consume(entity);
		return content;
	}

 

解析代码

/**
	 * 爬取数据 获取出url
	 * 
	 * @param url
	 */
	public static List<String> crawlingData(String url) {
		String rawHTML = null;
		try {
			rawHTML = getHTMLContent(url);
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println(e.toString());
		}
		// System.out.println("抓取网页:"+rawHTML);
		// 将当前页面转换成Jsoup的Document对象
		Document doc = Jsoup.parse(rawHTML);

		// 获取所有的博客列表集合
		// Elements blogList = doc.select("p[class=content]");

		Elements blogList = doc.select("div[class=video_list video_short]");

		// System.out.println("解析列表:"+rawHTML);
		List<String> list = new ArrayList<String>();
		// 针对每个博客内容进行解析,并输出
		for (Element element : blogList) {

			String href = element.select("a[class=small_img_con border-radius]").attr("href");
			 
			String vidoeTime = element.select("div[class=time_con]").select("span[class=video_play_timer]").text();
			
 			String name = element.select("div[class=video_small_intro]").select("a[class=video-title c-link]").text();
			
			String ly = element.select("div[class=c-color-gray2 video-no-font]").select("span[class=wetSource c-font-normal]").text();
			
			String uploadtime = element.select("div[class=c-color-gray2 video-no-font]").select("span[class=c-font-normal]").text();
			
			list.add(href 
					+ ",__," + name
					+ ",__," + uploadtime
					+ ",__," + vidoeTime
					+ ",__," + href
					+ ",__," +href
					+ ",__," + ly);
//			 System.out.println(href + ",__," + name+ ",__," + datetime+ ",__," + uploadname+ ",__," + uploadnamemasterurl);

		}
		return list;
	}

 

解析介绍

1.这里的 element.select("div[class=time_con]") 和js中jquery 中的选择器材差不多

2.父子及,可以使用select xx .select 这样使用

3.出结果可以attr("xx")  或  text()

4.jsonup 和poi 的maven 依从网上随便用没啥版本影响

 

完整代码

package com.superman.test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

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;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.alibaba.fastjson.JSONArray;


/**
 * 爬取xx数据全网视频xx词搜索对应视频
 * 
 * 调用xx查询
 * 爬取服务  根据关键词爬取视频网站数据
 * 侵权线索
 * 
 * 导出excel
 * 
 * @author jianghy
 *
 */
public class DataLearnerCrawlerSPWZv2 {

	public static void main(String[] args) throws InterruptedException {
		crawlingTask001();

	}

	/**
	 * 爬取 任务 001 爬取 xx数据
	 * 	爬取xxxx字版本100页数据
	 * 
	 * @param url
	 * @throws InterruptedException 
	 */
	public static void crawlingTask001() throws InterruptedException {

		// ----------------------------------代办任务开始--------------------------

		// 爬xx xx栏目 文字版 其他选项不限
	
		// 创建存储
		List<List<String>> list0 = new ArrayList<List<String>>();

		// ----------------------------------爬取,任务--------------------------

		System.out.println(new Date() + "爬取,任务执行开始!");

		// 爬取数据
		for (int i = 1; i < 2; i++) {
			Thread.sleep(500);
			String url = "https://www.xx.com/sf/vsearch?pd=video&tn=vsearch&lid=b3581e7000011f50&ie=utf-8&rsv_pq=b3581e7000011f50&wdxhJiHsELdcqFigI&rsv_bp=1&f=8&async=1&pn="+ i;
			List<String> list = crawlingData(url);
			list0.add(list);
		}
		System.out.println(new Date() + "爬取,任务执行完毕!");

		
		// ----------------------------------读取爬取数据,任务--------------------------
		System.out.println(new Date() + "读取爬取数据,任务执行开始!");

		JSONArray ja = new JSONArray();
		// 读取数据
		for (int i = 0; i < list0.size(); i++) {

			List<String> list01 = list0.get(i);
			System.out.println("第:" + (i + 1) + "页内容,共计:" + list01.size() + "条数据!");
			for (int j = 0; j < list01.size(); j++) {
				System.out.println(j + "号文件地址:" + list01.get(j));
				ja.add(list01.get(j));
				// TODO 1.之后这里进行对每个页面进行读取 2.获取文件内容中图片 3.下载到本地 并生成对应文件夹河对应word文档中
			}
		}
		System.out.println(new Date() + "读取爬取数据,任务执行完毕!");

		
		// ----------------------------------数据存入持久化磁盘,任务--------------------------
		System.out.println(new Date() + "数据存入持久化磁盘,任务执行开始!");
		spider(ja); 
		System.out.println(new Date() + "数据存入持久化磁盘,任务执行完毕!");

				
				
		// ----------------------------------代办任务结束--------------------------

		
	}

	/**
	 * 爬取数据 获取出url
	 * 
	 * @param url
	 */
	public static List<String> crawlingData(String url) {
		String rawHTML = null;
		try {
			rawHTML = getHTMLContent(url);
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println(e.toString());
		}
		// System.out.println("抓取网页:"+rawHTML);
		// 将当前页面转换成Jsoup的Document对象
		Document doc = Jsoup.parse(rawHTML);

		// 获取所有的博客列表集合
		// Elements blogList = doc.select("p[class=content]");

		Elements blogList = doc.select("div[class=video_list video_short]");

		// System.out.println("解析列表:"+rawHTML);
		List<String> list = new ArrayList<String>();
		// 针对每个博客内容进行解析,并输出
		for (Element element : blogList) {

			String href = element.select("a[class=small_img_con border-radius]").attr("href");
			 
			String vidoeTime = element.select("div[class=time_con]").select("span[class=video_play_timer]").text();
			
 			String name = element.select("div[class=video_small_intro]").select("a[class=video-title c-link]").text();
			
			String ly = element.select("div[class=c-color-gray2 video-no-font]").select("span[class=wetSource c-font-normal]").text();
			
			String uploadtime = element.select("div[class=c-color-gray2 video-no-font]").select("span[class=c-font-normal]").text();
			
			list.add(href 
					+ ",__," + name
					+ ",__," + uploadtime
					+ ",__," + vidoeTime
					+ ",__," + href
					+ ",__," +href
					+ ",__," + ly);
//			 System.out.println(href + ",__," + name+ ",__," + datetime+ ",__," + uploadname+ ",__," + uploadnamemasterurl);

		}
		return list;
	}

	// 根据url地址获取对应页面的HTML内容,我们将上一节中的内容打包成了一个方法,方便调用
	public static String getHTMLContent(String url) throws IOException {
		// 建立一个新的请求客户端
		CloseableHttpClient httpClient = HttpClients.createDefault();
		// 使用HttpGet方式请求网址
		HttpGet httpGet = new HttpGet(url);
		httpGet.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0"); // 设置请求头消息User-Agent
		// 获取网址的返回结果
		CloseableHttpResponse response = httpClient.execute(httpGet);
		// 获取返回结果中的实体
		HttpEntity entity = response.getEntity();
		String content = EntityUtils.toString(entity);
		// 关闭HttpEntity流
		EntityUtils.consume(entity);
		return content;
	}

	 

}

 

文中很多地方换成了xx ,使用的时候自己患上自己要爬取的网站信息即可ok

 

有需要随时留言,唠唠 ^_^

 

 

ok

 

 

 

 

持续更新

 

 

 

 

 

 

### 回答1: 天眼查询是一家提供企业信息查询服务的网站,它提供了丰富的企业数据,包括公司的基本信息、法律诉讼情况、经营状况、财务数据等。如果想要获取天眼查询的企业数据,可以使用Java编写一个网络爬虫。 首先,我们需要使用Java的网络爬虫库,例如Jsoup,来向天眼查询网站发送HTTP请求,并获取网页的内容。接着,通过解析HTML页面的结构,我们可以提取出需要的企业数据。 在实际操作中,我们可以通过制定一些规则来确定需要爬取哪些企业的数据,可以根据公司名称、行业分类、地理位置等条件进行筛选。然后,我们使用Java的正则表达式或XPath来提取需要的数据,并将其保存到本地的文件或数据库中。 为了保证爬取的效率和稳定性,我们可以使用多线程技术来同时爬取多个企业的数据。此外,还可以设置合理的请求间隔和错误处理机制,防止被网站封禁或者遇到异常情况时能够自动恢复。 总之,通过使用Java编写一个网络爬虫,我们可以方便地从天眼查询网站爬取企业数据。这样,我们可以快速地获取大量企业的信息,为企业研究、市场调研等工作提供有力支持。 ### 回答2: 通过天眼查询企业数据,可以使用Java进行数据爬取的操作。首先,需要使用Java的爬虫框架,例如Jsoup或者HttpClient等,来模拟浏览器发送HTTP请求,并获取网页的源代码。 接下来,我们可以通过分析天眼查询企业数据网页的源代码,找到我们所需的数据在网页中的位置和标签,例如公司名称、注册资本、法定代表人等等。使用Java的字符串处理函数或者正则表达式,可以将这些所需数据从网页源代码中提取出来。 然后,将提取出来的数据存储到Java数据结构中,例如数组、集合或者自定义的实体对象。可以使用Java数据持久化技术,例如文件存储、数据库存储等,将这些数据保存下来,以备后续使用。 在爬取时,可能会遇到反爬虫机制,例如验证码、限流等。针对这些情况,我们可以使用Java的图像处理库,例如JavaCV或者OpenCV等,来自动识别验证码,并绕过限流等机制。 除了基本的数据爬取外,还可以使用Java的多线程技术,例如线程池,实现更高效的爬取。可以将爬取任务分配给多个线程去执行,从而提高爬取速度。 总之,通过使用Java进行天眼查询企业数据爬取操作,我们可以利用Java强大的网络请求、数据处理和多线程等特性,轻松地获取所需的企业数据,并进行后续分析和使用。 ### 回答3: 天眼查询是一个用于查询企业信息的网站,提供了大量的企业数据。要实现对天眼查询网站上的企业数据进行爬取,可以使用Java语言进行开发。 首先,我们需要使用Java的网络爬虫库,例如Jsoup,来进行网页的解析和数据的抓取。通过发送HTTP请求,获取天眼查询网站上的企业数据页面的HTML源码。 接下来,我们需要分析天眼查询网站上企业数据页面的HTML结构,找到所需数据的标签和属性。使用Jsoup等工具提供的选择器功能,可以通过CSS选择器或XPath语法,精确地定位所需数据的位置。 一旦定位到所需数据的位置,我们就可以使用Java代码提取和处理这些数据。通过解析HTML,获取企业的名称、法定代表人、注册资本、成立日期、公司地址等基本信息。 此外,天眼查询网站还提供了企业的股东信息、对外投资信息、主要人员信息等更详细的数据。我们可以根据需求,进一步处理这些数据,例如提取股东名称、持股比例等信息,并存储到数据库或导出为Excel等文件格式。 在处理数据时,我们还需要注意网站的访问频率和规范。爬取过程中,应该控制请求的频率,避免对网站造成过大的负担,并遵守相关的爬虫规范。 最后,可以根据爬虫的实际使用场景,进行数据的清洗、分析和可视化等后续处理工作,以满足具体的需求。 总之,通过使用Java语言编写爬虫程序,结合网络爬虫库和HTML解析工具,可以实现对天眼查询企业数据爬取和处理。这样,我们可以方便地获取和利用大量的企业信息数据
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值