java爬虫抓取动态网页(《》大文件下载)
优采云 发布时间: 2022-02-11 16:40java爬虫抓取动态网页(《》大文件下载)
一、概览
大文件的下载方式很多,idm、aria2、迅雷直接链接也可以从idm下载
但是我发现还是有一些东西需要爬虫+batch(batch注定不小,只好带上多线程),于是开始尝试。
二、爬虫部分
/**爬虫实体
* @author LW
* @2021/10/30 19:25
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Parse {
private String title;
private String img;
private String price;
}
/**爬虫服务
* @author LW
* @2021/10/31 14:35
*/
public class ParseService {
public static void main(String[] args) throws Exception {
//测试数据
new ParseService().parseTo945("https://www.945kmzh.com/pc").forEach(System.out::println);
}
public List parseTo945(String keywords) throws Exception{
String url = keywords;
//解析网页 (Jsoup返回Document 就是页面对象 )
Document document = Jsoup.parse(new URL(url),30000);
Elements elements = document.getElementsByClass("post-item-thumbnail");
ArrayList goodsList = new ArrayList();
for (Element el : elements) {
String img = el.getElementsByTag("img").eq(0).attr("src");
Parse content = new Parse();
content.setImg(img);
goodsList.add(content);
}
return goodsList;
}
}
三、多线程
<p>/**
* @Author LW
* @2022/2/11 14:16
*/
public class MyMultiThread extends Thread {
private List list;//集合
private int len;//集合长度
private int n;//线程数
private String pre;//路径前缀
private String dir;//目录
private int flag;// 线程号
public MyMultiThread(List list, int len, int n, String pre, String dir, int flag) {
super();
this.list = list;
this.len = len;
this.n = n;
this.pre = pre;
this.dir = dir;
this.flag = flag;
}
@Override
public void run() {
//n线程数
// 每个线程执行一部分 (len/n)*flag--->(len/n)*(flag+1)
for (int j = (len/n)*flag; j