这个是爬虫教程第二篇,教大家如何爬取普通页面的内容。
前期准备:
- JSOUP 1.83 jar包
- Eclipse 任意版本能运行java就行
- 谷歌浏览器
第一步:分析页面结构
我们要爬CSDN博客文章,直接访问某个人的CSDN博客主页,比如说我的CSDN主页:http://blog.csdn.net/guoxiaolongonly
进入主页,在页面上按F12查看标签的内容。
可以看到如上内容,基本的html就是js+css+html标签的构造,我们使用比较多的是a、img这两个元素下的内容。第一个是链接的元素,通常获取这个来实现往后的链接的跳转。第二个是图片元素,有时候需要爬图片链接来下载图片就爬这个Tag来过滤。里面的内容也都是一个链接地址。
第二步:选取合适的过滤方法
我现在想要爬的就是这个标题中的链接。
这个标签里href属性放了我想要访问的文章详情的链接
可以使用Jsoup的方法:Elements elements = doc.getElementsByTag("a");//找到所有a标签
对a标签进行过滤就行了
也可以直接获取class标签下的内容,再在这个class下找到a标签获取a标签的href属性值。
如:Element elementTitle = document.getElementsByClass("link_title").first();//标题。
这样只需要再找到这个elementTitle下的a元素就好了。
当然JSOUP过滤标签的方式很多,可以根据需要选择合适的方法来过滤。
第三步:开始写代码
好了就是这么简单。接下来看看代码吧。
//代码为2018年11月10日更新
|
|
总结
这个类中我封装了获取文章列表、获取文章内容保存文章内容的方法。
首先解析首页获取首列表页中每个文章的链接,再依次访问每个链接爬取文章标题和内容。
如果列表页存在下一页。再对下一页列表进行相同的操作,是不是很好理解了。
文章保存格式为txt文本,保存的路径根据博客名来命名,保存的文件名称为文章标题,文本则保存文章内容。
有这个demo是不是可以写出文章搜索器啊,文章过滤器...甚至爬取整个csdnblog的所有文章都不是问题。就看你方法和过滤怎么做了。
大家可以设置blogName去爬你想要的文章了,比如说我:guoxiaolongonly
这边用post模拟浏览器请求。因为直接get,页面无法加载。
针对文本保存文档编码乱码问题。还希望大家自己研究一下。
好运~~ 晚安~
By Xiaolong:You have a dream,you got to protect it!