项目思路
步骤如下:
先抓取唐诗数据的列表页(HTML格式)
从HTML中提取 ①详情页信息 ②总共抓了多少首诗
分别抓取每首诗的详情页(HTML格式)
从详情页HTML中提取诗词信息(标题、朝代、作者、正文)
计算 sha256(标题+正文)——求了一个hash值,保证数据不重复
调用一个分词第三方库,对内容进行分词,用于词云图展示
将数据保存入库
技术选型
分析上述几个步骤,我们需要用到很多第三方库,有了技术的支持才能完成对应的功能。
1、HtmlUnit(用于数据爬取)
通过HtmlUnit库,可以很方便的加载一个完整的Html页面而且可以很轻易的模拟各种浏览器。
用其他工具来获取其中的元素了。当然也可以直接在HtmlUnit提供的对象中获取网页元素(比
如诗词的文本内容或详情页的url)。
此处的列表页请求、解析我用的是HtmlUnit库提供的对象进行的数据获取。
2、XPath(元素定位)
通过XPath的基本定位用法,可以一次性的直接获取到每首诗的具体某个信息(如:标题、作者、朝代、正文)。
标题:”//div[@class=‘cont’]/h1/text()”
朝代:”//div[@class=‘cont’]/p[@class=‘source’]/[1]/a[1]/text()”
作者:”//div[@class=‘cont’]/p[@class=‘source’]/[1]/a[2]/text()”
正文:”//div[@class=‘cont’]/div[@class=‘contson’]”.getTextContent()
3、SHA-256(每首诗的唯一标识)
通过计算的每首诗的sha-256可以去重,保证数据唯一性。
4、ansj_seg(分词)
通过ansj_seg,可以对获取到的诗正文内容进行分词,用于将来的展示。
5、MySQL数据库(数据存储)
这是一个轻量级的数据库,操作方便。利用客户端我们可以方便的对数据进行存储与管理。
6、maven(项目管理工具)
在项目开发的过程中,我们会用到很多依赖包,所以此时maven管理是必不可少的,它可以极大提高开发效率。
熟悉以上工具使用
HtmlUnit的使用:通过编写一个Demo的方式去熟悉工具的简单使用。
//列表页下载提取Demo
public class 列表页下载提取Demo {
public static void main(String[] args) throws IOException {
//无界面的浏览器(HTTP 客户端)
WebClient webClient = new WebClient(BrowserVersion.CHROME);
//关闭了浏览器的js执行引擎和css执行引擎
webClient.getOptions().setJavaScriptEnabled(false);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setUseInsecureSSL(true);
//请求列表页
HtmlPage page = webClient.getPage("https://so.gushiwen.org/gushi/tangshi.aspx");
System.out.println(page);
//保存到指定路径
File file = new File("唐诗三百首\\列表页.html");
page.save(file);
//获取html的body标签的内容
HtmlElement body = page.getBody();
//获取body中的有用的标签
List<HtmlElement> elements = body.getElementsByAttribute(
"div",
"class",
"typecont");
/* for (HtmlElement e:elements){
System.out.println(e);
}*/
//取出五言绝句
HtmlElement divElement = elements.get(0