Python爬虫——Selenium方法爬取LOL页面

文章目录

  • Selenium介绍
  • 用Selenium方法爬取LOL每个英雄的图片及名字

Selenium介绍

Selenium 是一个用于自动化Web应用程序测试的工具,但它同样可以被用来进行网页数据的抓取(爬虫)。Selenium 通过模拟用户在浏览器中的操作(如点击、输入、滚动等)来与网页交互,并可以捕获网页的渲染结果,这对于需要JavaScript渲染的网页特别有用。

    1. 安装Selenium
      首先,你需要安装Selenium库。可以通过pip安装:

      pip install selenium
      
    1. 下载WebDriver
      Selenium需要WebDriver来与浏览器交互。WebDriver是一个浏览器特定的驱动程序,允许Selenium控制浏览器。你需要根据你的浏览器(如Chrome、Edg等)下载相应的WebDriver。
    • 如何下载使用:
      • 直接在网上搜索你所使用的浏览器驱动,下载和你浏览器相同版本的驱动
      • 比如edg浏览器:
        Python爬虫——Selenium方法爬取LOL页面_第1张图片
        Python爬虫——Selenium方法爬取LOL页面_第2张图片
      • 下载和你的浏览器相同的驱动
      • 将下载好的驱动放在你的python.exe同一个目录下
      • 或者使用时可以在代码中指定WebDriver的路径

用Selenium方法爬取LOL每个英雄的图片及名字

  • 使用Selenium方法相比requests方法爬取数据要简便的多

  • 爬取步骤:

    • 1、指定浏览器的驱动,并通过网址请求页面
    • 2、获取想要的数据
  • 1、指定浏览器的驱动,并通过网址请求页面

    • 这里我们使用的是edg驱动(已经将驱动放在了环境变量中)
    • 给定网址https://101.qq.com/#/hero
    • Selenium方法虽然不需要requests方法中那些前面的步骤,但还是需要查看索要爬取页面的请求方式(按F12),查看方法相同
      # 指定驱动
      driver = webdriver.Edge()
      # 请求页面 get请求方式
      driver.get('https://101.qq.com/#/hero')
      
  • 获取想要的数据

    • LOL这个页面需要通过一个方法,让其请求页面的时候等待几秒(可自己设定),为了让页面渲染完,不然会爬取失败

    • 通过XPATH的方法获取所有存放信息的li标签

    • 获取所有图片的url和英雄姓名

      # 等待某个元素加载完成
          WebDriverWait(driver, 10).until(
              EC.presence_of_element_located((By.XPATH, "//ul[@class='hero-list']"))
          )
          # 获取所有存放信息的li标签
          li_list = driver.find_elements(By.XPATH, "//ul[@class='hero-list']/li")
      	# 遍历每一个li标签,获取图片和英雄姓名
          for li in li_list:
              img_url = li.find_element(By.XPATH, "div/div/img").get_attribute("src")
              hero_name = li.find_element(By.XPATH, "div/p").text
              print(img_url, hero_name)
      
  • 完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.edge.options import Options

if __name__ == '__main__':
	# 指定驱动
    driver = webdriver.Edge()
    # 请求页面
    driver.get('https://101.qq.com/#/hero')
    # 等待某个元素加载完成
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//ul[@class='hero-list']"))
    )
    # 等待某个元素加载完成
	WebDriverWait(driver, 10).until(
		EC.presence_of_element_located((By.XPATH, "//ul[@class='hero-list']"))
		    )
	# 获取所有存放信息的li标签
	li_list = driver.find_elements(By.XPATH, "//ul[@class='hero-list']/li")
	# 遍历每一个li标签,获取图片和英雄姓名
	for li in li_list:
		img_url = li.find_element(By.XPATH, "div/div/img").get_attribute("src")
		hero_name = li.find_element(By.XPATH, "div/p").text
		print(img_url, hero_name)
	# 关闭驱动
    driver.close()
  • 爬取结果
    • 点击图片链接便可以查看
      Python爬虫——Selenium方法爬取LOL页面_第3张图片

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