文章目录
- 概述
- 提取链接
- 代理池的搭建及应用
- 多线程的应用以提高提取电子书信息的速度
- 信息提取
- 信息存储
- 遇到到问题及解决方案
- 运行结果
- 总结
1.概述
本次对脚本之家电子书信息提取采用结构化信息提取。结构化提取是指把提取的数据结构定义成一个类,然后有一个解析网页的方法根据输入网页返回解析出来的类实例,具体内容可参考《解密搜索引擎技术实战》第三章索引内容的提取。定义好用来接收网页数据的电子书信息类,部分代码如下
public class JBContent {
String bookName;//书名
String bookSize;//书大小
String bookDesc;//书描述
String bookBelong;//书类别
String bookTime;//更新时间
String bookShare;//书分享码
String bookDowlink;//书下载页面链接
public JBContent(String bookName,String bookSize,String bookDesc,String bookBelong,
String bookShare,String bookDowlink,String bookTime){
this.bookName = bookName;
this.bookSize = bookSize;
this.bookDesc = bookDesc;
this.bookBelong = bookBelong;
this.bookShare = bookShare;
this.bookDowlink = bookDowlink;
this.bookTime = bookTime;
}
2.提取链接
脚本之家电子书籍热门导航下所属种类(如网页制作,CSS教程等)链接的提取
public static Map<String,String> getUrl(String mainUrl)//采集热门导航下电子书种类的所有链接
{
Map<String,String> map = new HashMap<String,String>();
try {
Document doc = Jsoup.connect(mainUrl)
.header("User_Agent",getUserAgent())
.get();
Elements elements1 = doc.select(".cate.app > p > a");
for(int i= 0;i<elements1.size();i++)
{
String link1 = elements1.get(i).attr("abs:href");
String linkText = elements1.get(i).text();
map.put(link1,linkText);电子书
}
Elements elements2 = doc.select(".cate.app > p > a");
for(int i = 0;i<elements2.size();i++)
{
String link2 = elements2.get(i).attr("abs:href");
String linkText = elements2.get(i).text();
map.put(link2,linkText);//数据库xml
}
Elements elements3 = doc.select(".cate.info > p > a");
for(int i = 0;i<elements3.size();i++)
{
String link3 = elements3.get(i).attr("abs:href");
String linkText = elements3.get(i).text();
map.put(link3,linkText);//编程开发
}
}catch(IOException e){
System.out.println("处理:"+mainUrl+";失败");
return null;
}
return map;
}
3.代理池的搭建及应用
由于提取链接较多,访问次数频繁,为防止同一个IP访问次数达到一定的限制后封IP,也就是把这个IP列入黑名单,超过一段时间后再解封的问题。本例采用搭建代理池,用随机IP访问网页,至于搭建代理池的方法,可参靠这里,应用如下
- 收集User_Agent
static List<String> USER_AGENT = new ArrayList<String>() {
{
add("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586");
add("Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko");
add("Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)");
add("Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0");
add("Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.