目标 : 爬取某网站 并导出到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();
}
}
}