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文件
- 编辑xml配置文件
<!--通过generator工具会自动的连接数据库.并且通过反射自动的创建
pojo mapper 映射文件.所以需要添加数据库驱动文件
路径中不要添加中文!!!
-->
<classPathEntry location="E:\WorkJarSource\connDriver\mysql-connector-java-5.1.10-bin.jar" />