目录

  • 爬虫是什么
  • 为什么要用爬虫
  • 爬图片
  • 完整代码如下


爬虫是什么

爬虫,顾名思义就是爬行的虫子(笑死),是民间一种有名的大法术——五鬼搬运!不好意思,走错片场了。爬虫说白了就是获取数据的工具,一道自动抓取信息的程序。没错,像浏览器。

为什么要用爬虫

对啊,为什么要用爬虫呢,有浏览器不就好了。就实用而言,爬虫功能比浏览器多太多了,随便举个例子,在网上大量下载图片,图标,用爬虫简直太舒服了。好吧,这个例子举得不好,正常情况下没几个人干这事儿,但是在国内,不抢票的没几个吧,爬虫就是干这事的。

另外说一下,爬虫不只python能写,相比其他语言python简单完整些罢了,爬虫又不怎么重效率,C,JAVA,C++啥的就没什么优势了,这也说明简单才是人们所追求的。(看到句话的你,现在简单吗)

爬图片

Jsoup,是Java的HTML解析器,可以直接解析某个URL地址和HTML文本内容。Jsoup的jar包或依赖到[](Maven Repository: org.jsoup " jsoup (mvnrepository.com))下载或复制。

用idea新建一个Java项目就行了,maven项目也行。

上图,上图!

右上角file左键—>new—>Project,再按下图来或者建maven项目添加依赖就好了



java爬虫和python爬虫区别 爬虫和java的区别_jar包


随便命个名



java爬虫和python爬虫区别 爬虫和java的区别_java爬虫和python爬虫区别_02


鼠标放在项目名上右键新建文件夹,再把jar包拖进来,再右键add as Library导入。



java爬虫和python爬虫区别 爬虫和java的区别_jar包_03


在src(source简写)包下建包建类写程序。

在网站上,按f12看源码找到需要的东西,源码左上角箭头可快捷找左侧对应代码,图片所在父div标签class可用getElementsByClass找出。点开查看大图大差不差。



java爬虫和python爬虫区别 爬虫和java的区别_java爬虫和python爬虫区别_04


完整代码如下

代码注解齐全,不做过多解释。对了那个图片网站还行,拿来当壁纸,还是算了吧,我电脑有自带的壁纸软件,嘿嘿。

package com.jh.jsoup;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * @author hjh
 * @date 2021/7/12 19:56
 */
public class JsoupTest {
    public static void main(String[] args) throws IOException {
        //下载图片命名
        int count=0;
        String pageUrl=null;
        //根据爬取页数不同定义i的值
        for (int i = 1; i < 3; i++) {
            if (i==1){
                pageUrl="https://pickupimage.com/cn/search.cfm";
            }else{
                pageUrl="https://pickupimage.com/cn/search.cfm/?kw=&id=0&sortby=random&page="+i;
            }
            //alt+enter 补全,抛异常
            Document document = Jsoup.connect(pageUrl).get();
            //根据图片所在位置定位父div标签,确定查找属性
            Elements elementsByClass = document.getElementsByClass("cf-item");
            //循环本页图片
            for (Element element:elementsByClass){
                //获取图片大图路径
                String href = element.child(0).attr("href");
//                System.out.println(href);
                //注意:上面href的路径不全要补上对应的网页地址
                Document document1 = Jsoup.connect("https://pickupimage.com" + href).get();
                String attr = document1.getElementsByClass("thumb_image_wrap").get(0).child(0).child(0).attr("src");
//                System.out.println(attr);
                //同上
                URL url=new URL("https://pickupimage.com"+attr);
                HttpURLConnection httpURLConnection= (HttpURLConnection) url.openConnection();
                //由于网站不允许Java程序作为客户端进行访问,所以添加了下面这句话,设置用户代理欺骗服务器
                httpURLConnection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
                //获取输入流
                InputStream inputStream=httpURLConnection.getInputStream();
                //新建输出流
                OutputStream outputStream=new FileOutputStream("D:\\picture\\crawlerTest\\"+(++count)+".jpg");
                byte[] bytes=new byte[2048];
                //源码注释:If no byte is available because the stream is at the
                //     end of the file, the value <code>-1</code> is returned
                // 如果流位于末尾没有可用字节,则返回-1,即while循环到流为空为止
                int length=inputStream.read(bytes);
                while(length!=-1){
                    outputStream.write(bytes,0,length);
                    //读一点写一点
                    length=inputStream.read(bytes);
                }
                //关闭流
                inputStream.close();
                outputStream.close();
            }
        }
    }
}

运行成功,效果如下



java爬虫和python爬虫区别 爬虫和java的区别_爬虫_05