Jsoup常见问题

Jsoup爬虫出现的常见问题:

1.爬去链接出现404问题

解决方法:

加上.ignoreHttpErrors(true)属性

例如:

2.通过class爬取是出现class中有空格的形式

解决方法:

将空格用“.”来代替

例如:

 

3.jsoup出现UnknownHostException问题

java.net.UnknownHostException: bbs.ew86.com

    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:195)

    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)

    at java.net.Socket.connect(Socket.java:529)

    at sun.net.NetworkClient.doConnect(NetworkClient.java:158)

    at sun.net.www.http.HttpClient.openServer(HttpClient.java:411)

    at sun.net.www.http.HttpClient.openServer(HttpClient.java:525)

    at sun.net.www.http.HttpClient.<init>(HttpClient.java:208)

解决方法:

使用try....catch方法

 

4.Jsoup分页爬虫

带有尾页的情况,可以根据尾页来进行获取前面的页面链接

代码示例:

// 获取分页的其他疾病

// 获取尾页的链接

Elements elements3 = Jsoup.connect(KeYiUrl).userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31").get().select("div.art_page").select("span").select("a");//获取所有分页的链接

for (Element element1 : elements3) {

    if(element1.text().toString().equals("尾页")){

        String[] strarray=element1.attr("abs:href").toString().split("-");

        pageList.add(strarray[0]+"-"+strarray[1]);   // 当前页

        int endPage = Integer.parseInt(strarray[2]);   // 获取总页数

    if(strarray[2].equals("2")){

        pageList.add(strarray[0]+"-"+strarray[1]+"-"+"2");// 如果就两页获取第二页

    }

if(Integer.parseInt(strarray[2])>2){

    for(int j=2;j<=endPage;j++){

        pageList.add(strarray[0]+"-"+strarray[1]+"-"+j);//页数数量大于2获取其他页

    }

}

}
// 遍历所有其它疾病链接取得疾病名和疾病链接

for(int i=0;i<pageList.size();i++){

    Elements elements4=Jsoup.connect(pageList.get(i)).userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31").get().select("div.leftPinBox").select("div.leftPinBoxUL.a_02").select("li").select("a");//获取所有二级科室的链接
    System.out.println(pageList.get(i));

    for (Element element2 : elements4) {
    System.out.println(element2.text());
    }

    for (Element element2 : elements4) {
    String KeErUrl=element2.attr("abs:href");//遍历二级科室链接
    String jiBingName=element2.text();//遍历每个(疾病名+链接)的集合取出疾病名(text()方法取出集合中的中文字符,toString()方法取出集合中所有字符,包含网页源代码的标签)
    if(jiBingName.contains("/")){//置换疾病名中可能出现的非法字符(文件命名不允许出现的字符)
        jiBingName=jiBingName.replace("/", "/");
    }
    JiBingObject bingObject=new JiBingObject(jiBingName, KeErUrl);//疾病名和链接存入写好的结构体中
    System.out.println(jiBingName);
    Helper.writeToFile(bingObject.toString(), "E:/网站原始数据/医网/链接列表2.txt", true);//将疾病名和链接存入本地(更改为自己电脑上的地址)
    }

}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值