wuyu7324 2019-07-11 23:27 采纳率: 0%
浏览 436

Jsoup爬取数据超时,已设置timeout?

package cn.xls.util;

import cn.xls.pojo.City;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**

  • @program:
  • @description: 获取城市信息
  • @author: l
    */
    public class CityInfoUtil {

    public static List getProvinceData(String requestUrl) {
    List lists = new ArrayList();
    try {
    Document document = Jsoup.connect(requestUrl).timeout(50000).maxBodySize(0).get();
    //获取所有的省份
    Elements provinceList = document.select("tr[class='provincetr']").select("td").select("a");
    //遍历省份
    for (Element element : provinceList) {
    //拼接当前省份下的城市地址
    String url1 = requestUrl.replace("index.html", element.attr("href"));
    Document document1 = Jsoup.connect(url1).timeout(50000).maxBodySize(0).get();

            //获取该省份下所有城市(第一列为城市区号,第二列为城市名)
            Elements citys = document1.select("tr[class='citytr']").select("td:eq(1)").select("a");
            String province = element.html();
            System.out.println("当前省份 : " + province);
            System.out.println("当前省份下有 : " + citys.size() + " 个城市");
    
            //遍历城市
            int cityCount = 0;
            for (Element element1 : citys) {
    

    // System.out.println("城市 : " + element1.html());
    //拼接当前城市下的区域地址
    String url2 = requestUrl.replace("index.html", element1.attr("href"));
    Document document2 = Jsoup.connect(url2).timeout(50000).maxBodySize(0).get();

                //获取该城市下所有区域(第一列为区域区号,第二列为区域名)
                Elements areas = document2.select("tr[class=countytr] td:eq(1)").select("a");
                String city = element1.html();
                System.out.println("当前城市 : " + (++cityCount) + city);
                System.out.println("当前城市下有 : " + areas.size() + " 个区");
                for (Element element2 : areas) {
                    System.out.println("区域 : " + element2.html());
                }
            }
            System.out.println("-----------");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return lists;
    

    }

    //测试
    public static void main(String[] args) {
    //List lists = getProvinceData("http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2017/index.html");
    List list1 = getProvinceData("http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2018/index.html");
    }
    }

  • 写回答

2条回答 默认 最新

  • 毕小宝 博客专家认证 2019-07-12 08:50
    关注

    API 执行过程中是由默认的超时时间的,可能是服务器端设置的,也可能是这个 jar 包设置的。

    评论

报告相同问题?

悬赏问题

  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障
  • ¥15 opencv 无法读取视频
  • ¥15 按键修改电子时钟,C51单片机
  • ¥60 Java中实现如何实现张量类,并用于图像处理(不运用其他科学计算库和图像处理库))
  • ¥20 5037端口被adb自己占了
  • ¥15 python:excel数据写入多个对应word文档