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();
		}
		  
		
	}
}
posted @ 2020-05-13 14:40  JC-0527  阅读(495)  评论(0编辑  收藏  举报