Java爬虫:脚本之家电子书的信息提取

文章目录

  1. 概述
  2. 提取链接
  3. 代理池的搭建及应用
  4. 多线程的应用以提高提取电子书信息的速度
  5. 信息提取
  6. 信息存储
  7. 遇到到问题及解决方案
  8. 运行结果
  9. 总结

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访问网页,至于搭建代理池的方法,可参靠这里,应用如下

  1. 收集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.
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值