简单的静态页面java爬虫
本帖最后由 HK仅輝 于 2020-11-20 12:43 编辑import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import java.io.*;
import java.net.URL;
public class pc {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
long t1=System.currentTimeMillis();
//访问目标网址
Connection connection1=Jsoup.connect("https://desk.3gbizhi.com/");
//连接成功后获取Document对象
Document document1= connection1.get();
Element elementDiv=document1.selectFirst("");
Element elementDiv1=elementDiv.selectFirst("");//搜索class=cl r 标签
Element elementUL=elementDiv1.selectFirst("");
Elements elementLis=elementUL.select("li");//通过找到的ul 搜索ul里面的所有li标签
for(Element elementLi:elementLis) {//遍历所有找到的li
Element elementA=elementLi.selectFirst("a");//搜索li里的a标签
String herURL=elementA.attr("href");//把a标签中的 href属性的值获取到
//System.out.println(herURL);
Element elementADiv=elementA.selectFirst("div");//把a标签里的标签找到
String innerName= elementADiv.text();//把标签里的文字获取到
System.out.println("创建"+innerName+"文件夹");
File file=new File("E://桌面//img//"+innerName);
if(!file.exists()){//如果文件夹不存在
file.mkdir();//创建文件夹
}
Connection connection2=Jsoup.connect(herURL);//访问新的小图连接
Document document2=connection2.get();//
Element elementDiv2=document2.selectFirst("");
Element elementUl=elementDiv2.selectFirst("");
Elements elementLI=elementUl.select("li");//搜索ul里的li标签
for(Element elementLIS:elementLI) {
Element elementDivName=elementLIS.selectFirst("");
String divName= elementDivName.text();
System.out.println("下载"+divName);
Element elementAA=elementLIS.selectFirst("a");//搜索li里的a标签
String herURLA=elementAA.attr("href");//把a标签中的 href属性的值获取到
//System.out.println(herURLA);
Connection connection3=Jsoup.connect(herURLA);//访问图片下载的连接 showcontw mtw
Document document3=connection3.get();
Element elementDiv3=document3.selectFirst("");
Element elementAa=elementDiv3.selectFirst("");//搜索li里的a标签
String xiaURL=elementAa.attr("href");
//System.out.println(xiaURL);
URL url=new URL(xiaURL);
InputStream is=url.openStream();
FileOutputStream fos=new FileOutputStream("E://桌面//img//"+innerName+"//"+divName+".jpg");
byte[] b=new byte;
int count=is.read(b);
while(count!=-1) {
fos.write(b,0,count);
fos.flush();
count=is.read(b);
}
fos.close();
is.close();
}
}
long t2=System.currentTimeMillis();
double a=(t2-t1)/1000;
System.out.println("下载完毕"+"用时:"+a+"s");
}
}
原来用c++也写过一个爬虫,加了一个用哈希表和布隆过滤器配合来防止重复抓去相同的页面,这东西得多线程,不然效率很慢。 HK仅輝 发表于 2020-11-20 12:33
怎么编辑,多加些注释?
小白,没发过多少帖子
你要学会怎么插入代码而不是把代码直接搞上来
就比如这样
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x609
name = "AnimationListener"
.end annotation 楼主重新编辑一下吧 BaconOle 发表于 2020-11-20 12:28
原来用c++也写过一个爬虫,加了一个用哈希表和布隆过滤器配合来防止重复抓去相同的页面,这东西得多线程, ...
刚开始学着写,就懂个爬取静态页面{:1_924:} shr123 发表于 2020-11-20 12:22
楼主重新编辑一下吧
怎么编辑,多加些注释?
小白,没发过多少帖子{:1_904:} HK仅輝 发表于 2020-11-20 12:29
刚开始学着写,就懂个爬取静态页面
可以从页面中用匹配字符串的方式抽取url,用url获取ip地址,向这个ip发送get请求,他又会给你返回个页面,循环往复,只要根页面选的好,理论上能爬去所有网页。 感谢大哥,刚在你的基础上爬了一下我想要的素材
页:
[1]