• Jsonp 使用 爬取 可直接解析页面


    目标 : 爬取某网站 并导出到excel
    方法 : 使用 JSOUP 爬取网站 ,使用AlibabaExcel 导出到文件
    实现 :
    1.pom.xml 应用对应jar包

        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.11.3</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.3</version>
        </dependency>
      2.java 代码实现  直接 使用列表信息
            
            使用jsoup 从网站获取数据
    public static void main(String[] args) {
        Document doc = null;
        try {
            //
            doc = Jsoup.connect("http://*****.html").get();   // 具体方法可以查看 jsoup 文档
            Element singerListDiv = doc.getElementsByAttributeValue("class", "content").first();
            Elements links = singerListDiv.getElementsByTag("a"); 
            for (Element link : links) {
                String linkHref = link.attr("href");
                System.out.println("==============" + linkText);
            }
          
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
      3.使用easyExcel 写入excel   说明文档 https://alibaba-easyexcel.github.io/quickstart/write.html
     
    public class TestExcel {
        private List<DemoData> data() {
              List<DemoData> list = new ArrayList<DemoData>();
              for (int i = 0; i < 10; i++) {
                  DemoData data = new DemoData();
                  data.setString("字符串" + i);
                  data.setDate(new Date());
                  data.setDoubleData(0.56);
                  list.add(data);
              }
              return list;
          }
    
          @Test
          public void simpleWrite() {
              // 写法1
              String fileName =   "D:/htmls/simpleWrite" + System.currentTimeMillis() + ".xlsx";
              // 这里 需要指定写用哪个class去写
              ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build();
              WriteSheet writeSheet = EasyExcel.writerSheet("模板").build();
              excelWriter.write(data(), writeSheet);
              // 千万别忘记finish 会帮忙关闭流
              excelWriter.finish();
          }
      }
    
      使用到的对象 DemoData 
      
      @Data
      public class DemoData {
          @ExcelProperty("字符串标题")
          private String string;
          @ExcelProperty("日期标题")
          private Date date;
          @ExcelProperty("数字标题")
          private Double doubleData;
          /**
           * 忽略这个字段
           */
          @ExcelIgnore
          private String ignore;
      }
    
    
      可以根据对应的 jsoup 爬取对应网站 的页面  然后将数据拼装到内存 对象 在写入Excel 思路比较简单。EasyExcel使用的比较简单的用法,喜欢更复杂的可以查看对应的api
    

    免费代理网站 https://www.xicidaili.com/nt/ 可收录使用
    代理连接使用

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    
    public class HttpUtils {
    	/**
    	 * 设置代理ip
    	 * @throws IOException
    	 */
    	public static void setProxyIp() {
    		try {
    			List<String> ipList = new ArrayList<>();
    			BufferedReader proxyIpReader = new BufferedReader(new InputStreamReader(HttpUtils.class.getResourceAsStream("/proxyip.txt")));
    			
    			String ip = "";
    			while((ip = proxyIpReader.readLine()) != null) {
    				ipList.add(ip);
    			}
    			
    			Random random = new Random();
    			int randomInt = random.nextInt(ipList.size());
    			String ipport = ipList.get(randomInt);
    			String proxyIp = ipport.substring(0, ipport.lastIndexOf(":"));
    			String proxyPort = ipport.substring(ipport.lastIndexOf(":") + 1, ipport.length());
    			
    			System.setProperty("http.maxRedirects", "50");  
    	        System.getProperties().setProperty("proxySet", "true");   
    	        System.getProperties().setProperty("http.proxyHost", proxyIp);  
    	        System.getProperties().setProperty("http.proxyPort", proxyPort);
    	        
    	        System.out.println("设置代理ip为:" + proxyIp + "端口号为:" + proxyPort);
    		} catch (Exception e) {
    			System.out.println("重新设置代理ip");
    			setProxyIp();
    		}
    		  
    		
    	}
    }

        吾之爱,心之念。
               携子手,到白头。

  • 相关阅读:
    Codeforces Round 49 C-Minimum Value Rectangle(最小面积周长比)
    牛客网暑假训练第五场——F take(树状数组求概率期望)
    牛客网暑假训练第九场——F-Typing practice(多串并行 优化KMP详解)
    POJ
    牛客网暑假训练第九场——E Music Game(概率期望)
    2018 ACM 国际大学生程序设计竞赛上海大都会赛——J Beautiful Numbers(数位DP)
    牛客网暑假训练第五场——A gpa(01分数规划)
    POJ
    UPC-6623 MUL(最大权闭合子图)
    HDU-6380 degree(图论&并查集)
  • 原文地址:https://www.cnblogs.com/JC-0527/p/12882233.html
Copyright © 2020-2023  润新知