#这么晚大家都睡了吧,给大家发一个java爬虫
这是我现学现买 IO流的输入输出,异常的处理、获取文件位置,其中的Elemants元素
学习java爬虫必会的基础就是HTML 这也是程序员的基础吧!
JAVA总的来说什么都可以干真的很强大,一直认为只有Python可以写人工智能和大数据
其实JAVA也是可以的也难怪JAVA能屹立在圈里这么久。
我不知道以后的方向是什么,既然JAVA功能这么好就努力的学下去。总有一个方向适合我。
static String url="https://pvp.qq.com/web201605/herolist.shtml";
static String path="F://img/";
/**
* 根据网络地址
* @param url
*/
public static void getImages(String url){
//加载对应网址html代码
try {
Document document= Jsoup.connect(url).userAgent("Mozilla/4.0(compatible; MSIE 9.0;Widnows NT 6.1;Trident/5.0)").get();
//System.out.println(document);
//从HTML中找到并获取显示的ul标签
Elements selectUL=document.select("[class=herolist clearfix]");
//获取UL的li 查找li
Elements selectLI=selectUL.select("li");
//for循环遍历所有的li 获取详情页的地址及头像图片
//for(int i=0;i<selectLI.size();i++) {//size是标签的长度
//forEach 相当于给的集合或者是循环 e代表其中的每一个元素
//Element 叫元素 (标签)
for(Element e:selectLI) {
//找到英雄详情页的地址//找到a标签下的HREF当中的属性
String heroURL=e.select("a").attr("href");
//System.out.println(heroURL);
//获取英雄的名称
String heroName=e.select("a").text();
//System.out.println(heroName);
//拼接详情页的地址
String detailURL="https://pvp.qq.com/web201605/"+heroURL;
Document doc= Jsoup.connect(detailURL).userAgent("Mozilla/4.0(compatible; MSIE 9.0;Widnows NT 6.1;Trident/5.0)").get();
//显示背景div标签
Elements div =doc.select("[class=zk-con1 zk-con]");
//获取背景
String bg=div.attr("style");
//System.out.println(bg);
//拆分字符串;裁处英雄图片的地址
//substring(起始位置,终止位置)beginIndex,endIndex substring(start,end)
//表示从substring(start,end)范围拆分字符串
String heroImagesURL=bg.substring(16,bg.length()-11);
System.out.println("开始下载:"+heroImagesURL);
//规定图片下载的地址
String url2=path+heroName+".jpg";
//下载图片
//http://
download("https:"+heroImagesURL,url2);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 下载指定路径下的图片
* @param url
*/
public static void download(String Imgurl,String path) {
//构建URL链接
try {
URL url=new URL(Imgurl);
//IO 流 要从网站下下来就要变成流 把这个动心变成液体 通过管道输送到自己的程序 io流就是管道
//输入流,网页图片液化 输送到程序中
//url.openStream()开启一个字节流
DataInputStream dataInputStream=new DataInputStream(url.openStream());
//输出流,将图片的是数据,输送到指定的文件夹中
FileOutputStream outputStream=new FileOutputStream(path);
ByteArrayOutputStream output =new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int length=0;
while((length=dataInputStream.read(buffer))!=-1) {
output.write(buffer,0,length);//不在读取了到-1 -1是末尾
}
outputStream.write(output.toByteArray());
outputStream.close();
dataInputStream.close();
output.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
大家可以关注我,我慢慢学也与大家慢慢分享,共同努力,现在是一个开源的时代。