Selenium 解析页面(python + java)

安装Chromdriver

Mac

http://chroim-edriver.store.googleapia.com/index.html 选择对应的操作系统与谷歌浏览器版本的压缩包.Mac系统解压放入到/usr/local/bin 目录下
在这里插入图片描述

Python

demo

import time

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait


class JDSkuSpider():
    def execute(self):
        self.open_browser()
        self.browser.get("{自定义Url}")
        time.sleep(1)
        self.browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
        time.sleep(2)
        self.parse_page()
        pass

    # 打开浏览器
    def open_browser(self):
        options = webdriver.ChromeOptions()
        options.add_argument('headless') # 设置driver的参数为 无头模式
        self.browser = webdriver.Chrome(options=options) # 打开浏览器
        self.browser.implicitly_wait(1)  #等待时间
        self.wait = WebDriverWait(self.browser, 1)

    def parse_page(self):
        price_element = self.browser.find_element_by_class_name("price,J-p-4505438")
        # 价格
        print("--- 爬取价格 --")
        price = price_element.text
        print(price)
        # img_arr = self.wait.until(EC.presence_of_all_elements_located((By.XPATH,'//ul[@class="lh"]')))
        lis = self.browser.find_elements_by_xpath('//ul[@class="lh"]/li')
        print("--- 爬取图片 --")
        for li in lis:
            # 图片 需要下载吗
            print(li.find_element_by_tag_name('img').get_attribute("src"))
        print("--- 爬取重量 --")
        weight = self.browser.find_element_by_xpath('//div[@id="summary-weight"]/div[2]')
        print(weight.text)
        print("---爬取类别---")
        categories = self.browser.find_elements_by_xpath('//div[@id="choose-attr-1"]/div[2]/div')
        for category in categories:
            sku = category.get_attribute("data-sku")
            value = category.get_attribute("data-value")
            print("sku编号:" + sku + ",类别:" + value)

        print("--- 爬取净含量 --- ")
        net_weights = self.browser.find_elements_by_xpath('//div[@id="choose-attr-2"]/div[2]/div')
        for net_weight in net_weights:
            sku = net_weight.get_attribute("data-sku")
            value = net_weight.get_attribute("data-value")
            print("sku编号:" + sku + ",净含量:" + value)

        # print(weight.text)
        # print(len(lis.find_element_by_tag_name("li")))
        # print(lis.find_element_by_tag_name('img').get_attribute("src"))

        # img_arr = [item.get_ for item in img_arr]
        # for img in img_arr:
        #     print(img)
        # print(img.find_elemen_by_tag_name('img').get_attribute("src"))
        # 价格
        # print(price)


if __name__ == '__main__':
    spider = JDSkuSpider()
    spider.execute()

常用API

获取单个节点

  1. find_element_by_class_name 根据class获取element节点
  2. find_element_by_xpath 根据xml 路径获取element节点
  3. find_element_by_tag_name 根据标签获取element节点
  4. find_element_by_id 根据id获取element节点

获取节点下的列表

  1. find_elements_by_class_name 根据class获取element节点
  2. find_elements_by_xpath 根据xml 路径获取element节点
  3. find_elements_by_tag_name 根据标签获取element节点
  4. find_elements_by_id 根据id获取element节点

获取节点的属性、值信息

element.get_attribute(“data-sku”) 获取标签属性 data-sku 的值
element.text 获取标签的内容

Java

引入pom依赖

<dependency>
	<groupId>org.seleniumhq.selenium</groupId>
	<artifactId>selenium-java</artifactId>
	<version>3.141.59</version>
</dependency>

demo

package com.zimin.wiki.selenium;

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

import java.util.List;

/**
 * @author zimin
 * @since 2021/9/24 5:23 下午
 */
public class SeleniumTest {

    public static void main(String[] args) {
        ChromeDriver chromeDriver = new ChromeDriver();
        //打开网站
        chromeDriver.get("{解析的URL}");
        System.out.println("---- 获取商品价格 ----");
        WebElement elementByClassName = chromeDriver.findElementByClassName("J-p-4505438");
        System.out.println(elementByClassName.getText());
        System.out.println("---- 获取商品图片 ----");
        List<WebElement> elementsByXPath = chromeDriver.findElementsByXPath("//ul[@class='lh']/li");
        for (WebElement webElement : elementsByXPath) {
            System.out.println(webElement.findElement(By.tagName("img")).getAttribute("src").replace("n5", "n1"));
        }

        System.out.println("---- 获取商品重量 ----");
        List<WebElement> weight = chromeDriver.findElementsByXPath("//ul[@id='summary-weight']/div[2]");
        System.out.println(weight);

        System.out.println("---- 获取商品分类 ----");
        List<WebElement> categories = chromeDriver.findElementsByXPath("//ul[@id='choose-attr-1']/div[2]/div");
        for (WebElement category : categories) {
            String sku = category.getAttribute("data-sku");
            String value = category.getAttribute("data-value");
            System.out.println("sku编号:" + sku + ",类别:" + value);
        }

        System.out.println("---- 获取商品净含量 ----");
        List<WebElement> netWeights = chromeDriver.findElementsByXPath("//div[@id='choose-attr-2']/div[2]/div");
        for (WebElement netWeight : netWeights) {
            String sku = netWeight.getAttribute("data-sku");
            String value = netWeight.getAttribute("data-value");
            System.out.println("sku编号:" + sku + ",净含量:" + value);
        }
    }
}

常用API

获取单个节点

  1. findElementByClassName 根据class获取element节点
  2. findElementByXpath 根据xml 路径获取element节点
  3. findElementByTagName 根据标签获取element节点
  4. findElementById 根据id获取element节点

获取节点下的列表

  1. findElementsByClassName 根据class获取element节点
  2. findElementsByXpath 根据xml 路径获取element节点
  3. finElementsByTagName 根据标签获取element节点
  4. finElementsById 根据id获取element节点

获取节点的属性、值信

element.getAttribute(“data-sku”) 获取标签属性 data-sku 的值
element.getText 获取标签的内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值