JSOUP实现网页爬取实现范例

JSOUP介绍

JSOUP介绍

概念

 

说明:JSOUP是java操作Html的工具包,操作类似于jQuery(#id, element, .class)

 

 

入门案例

获取静态数据

 

 

 

页面分析

 

 

 

入门案例

/**

 * 1.爬取静态页面数据 获取页面标题

 * 2.定位目标网站的页面

 * 3.定位页面的元素内容

 * 4.获取具体的数据

 * 5.数据处理

 * 6.入库保存

 * @throws IOException

 */



@Test

public void test01() throws IOException{

String url = "http://www.tmooc.cn/web/index_new.html?tedu";



//通过JSOUP进行数据爬取

Document document = Jsoup.connect(url).get();



//通过jsoup提供的选择器快速定位目标元素

Element element = document.select(".b_search h2").get(0);



//获取h2的具体的文本内容

String msg = element.text();



System.out.println("爬取标题数据:"+msg);

}

总结:通过上述的操作方法,只能获取页面中的静态数据.不能获取动态的数据.

 

 

获取学生的人数

定位页面元素

 

 

 

获取学生数量

//获取动态的页面数据  与之前的完全不同了

@Test

public void test03() throws IOException{

String url = "http://www.tmooc.cn/commonData/getCommonNum";



Response response =

Jsoup.connect(url).ignoreContentType(true).execute();



//将获取到的结果转化为字符串

String resultJSON = response.body();



System.out.println("获取响应数据:!!!!!"+resultJSON);

//{"result":"1","obj":{"userNum":397607,"bookNum":999,"dirNum":17}}



//获取学生的人数

JsonNode jsonNode = objectMapper.readTree(resultJSON);



//获取obj的属性值

String userNum =

jsonNode.get("obj").get("userNum").toString();

System.out.println("获取学生的人数:"+userNum);

}

 

 

获取首页中的热门课程

需求描述

说明:

通过获取首页的热门课程,获取课程的名称和任课教师,学习的人数等数据.并且将这些数据入库保存.

 

 

 

确定页面请求

 

说明:

根据页面分析,需要准备2个对象保存获取的数据.

课程:Book 章节:section

 

 

 

建立数据表

说明:构建课程数据表

 

 

 

构建章节的数据表

 

 

实现数据的入库

通过自动生成工具创建pojo对象

说明:使用自动生成工具创建出pojo和mapper及映射文件

 

 

忽略未知字段

说明:由于爬虫爬取数据时,有些数据不是我们必须获取的,.所以在定义数据表时,数据表中的字段与返回的JSON的属性不一致.所以必须添加该注解.

 

 

 

定义封装对象

 

 

 

 

实现数据的插入

@Service

public class StudentBookServiceImpl implements StudentBookService {



@Autowired

private StudentBookMapper bookMapper;



@Autowired

private StudentSectionMapper sectionMapper;



private static ObjectMapper objectMapper = new ObjectMapper();

@Override

public void insertBook(String url) {

try {

//通过url实现JSOUP查询

String resultJSON =

Jsoup.connect(url).ignoreContentType(true).execute().body();



BookList bookList =

objectMapper.readValue(resultJSON,BookList.class);



//循环遍历

for (StudentBook book : bookList.getList()) {



if(book.getSections() !=null){

//获取章节list集合

List<StudentSection> sList =

book.getSections();



for(StudentSection section :sList){

//进行主外键对象关联

section.setBookId(book.getId());

sectionMapper.insert(section);

}



}



//表示已经将章节信息入库  需要把课程信息入库

bookMapper.insert(book);

System.out.println("恭喜你爬虫数据已经成功入库,快乐的过节吧!!!!!");

}



} catch (Exception e) {

// TODO: handle exception

}



}

 

 

客户端调用

private StudentBookService studentBookService;



//通过spring容器动态获取spring中的对象

@Before

public void init(){

ApplicationContext  context =

new ClassPathXmlApplicationContext("/spring/application*.xml");



studentBookService =

(StudentBookService) context.getBean("studentBookServiceImpl");



}





//获取热门课程

@Test

public void test04() throws IOException{

String url = "http://tmooc.cn/book_test/getHotBook";



studentBookService.insertBook(url);

}

 

 

数据入库验证

 

 

代码自动生成工具

代码生成工具说明

说明:

之前通过手动构建POJO对象的效率太低.并且还容易出错.所以引入代码自动生成工具

作用:

能够根据执行的数据表自动生成pojo对象(以驼峰规则的方式生成),

生成Mapper接口文件(简单的单表增删改查的操作)

生成映射文件xml,与接口文件相对应.

 

 

安装插件

 

 

 

添加配置文件

1.添加properties文件

 

  1. 编辑xml配置文件

<!--通过generator工具会自动的连接数据库.并且通过反射自动的创建

pojo mapper 映射文件.所以需要添加数据库驱动文件

路径中不要添加中文!!!

  -->

<classPathEntry location="E:\WorkJarSource\connDriver\mysql-connector-java-5.1.10-bin.jar" />

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值