Selenium 案例

前言

        上一篇文章分享了Selenium的爬虫方面的入门内容,本次将要分享的内容是Selenium的实际使用案例。


一、准备工作

        首先在准备开始爬取内容之前我们要想好爬取什么内容。这次的案例将爬取JD的商品信息(我这算不算间接打广告)

        然后我们要确定需要爬取的目标:商品的信息、价格、图片

 二、步骤

        确定了目标之后我们就可以准备动工了。

在于对应的网站建立连接后。

首先:我们需要获取到包含商品所有信息的页面元素div

其次:我们通过div获取 我们需要爬取的具体信息

最后:对于图片进行针对性的处理

代码展示: 

package com.zhw;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.List;
import java.util.UUID;

/**
 * @author louis
 * @create  2022-10-27 14:14
 */
public class Demo1 {
    public static void main(String[] args) throws Exception {
        //设置驱动
        System.setProperty("webdriver.chrome.driver", "D:\\Software\\chromedriver_win32\\chromedriver.exe");
        //创建驱动
        WebDriver driver = new ChromeDriver();
        //与将要爬取的网站建立连接
        driver.get("https://search.jd.com/Search?keyword=%E7%94%B5%E8%84%91&enc=utf-8&wq=%E7%94%B5%E8%84%91&pvid=c1de85046f9b42b7b5e1b39cb0a096ce");

//        1.获取到 包含 商品 所有信息 的页面元素 div
        List divs = driver.findElements(By.className("gl-i-wrap"));
//        System.out.println(divs.size());
        for (WebElement div : divs) {
//            2.通过 div 获取 具体的爬取信息 信息 价格 图片
            System.out.println(div.findElement(By.cssSelector("div.p-name > a > em")).getText());
            System.out.println(div.findElement(By.cssSelector("div.p-price > strong > i")).getText());
            WebElement imgEle = div.findElement(By.cssSelector("div.p-img > a > img"));
            System.out.println(imgEle.getAttribute("src"));

//            3.针对图片做针对性的处理->从网上将图片下载下来
            downloadImg(imgEle.getAttribute("src"));
            System.out.println("============【表情】=================================");
        }

//        关闭浏览器
        driver.close();
//        释放资源
        driver.quit();
    }

    //                3.针对图片做针对性的处理->从网上将图片下载下来
    private static void downloadImg(String src) throws Exception {
        if (null == src || "".equals(src))
            return;
//      3.1 将 源头图片 定义 输入流
        URL url = new URL(src);
        InputStream in = url.openStream();
//      3.2 定义 最终图片下载订制,定义 输出流
        OutputStream out = new FileOutputStream(new File("D:\\Temp\\1027\\" + UUID.randomUUID().toString() + ".jpg"));
//      3.3 边读边写
        int len = 0;// 一次读多少字节
        byte[] bbuf = new byte[1024]; // 默认一次读1k
        while ((len = in.read(bbuf))!=-1){
            out.write(bbuf,0,len);
        }
//      3.4.释放资源
        in.close();
        out.close();
    }
}

效果展示:

Selenium 案例_第1张图片

 Selenium 案例_第2张图片

 如果大家上手操作了会发现,有些图片无法爬取。可能是网站进行了一些限制。

且本文的案例仅仅演示了爬取单页面的内容,我们可以获取下一页的元素,对它进行点击操作,继续爬取所需信息。

当然Selenium也不是只用于爬取信息,还可以用于测试。该部分内容我就不分享啦,有兴趣的朋友可以自行搜索研究。 


总结

  本次的分享到此为止啦,本篇文章仅简单的分享了selenium的应用的案例篇爬取商品信息、图片,如有兴趣爬取视频、音频啥的,可以自行研究。本人技术有限,如有错误还望指正。

你可能感兴趣的:(selenium,爬虫,python)