文章目录
- Selenium介绍
- 用Selenium方法爬取LOL每个英雄的图片及名字
Selenium介绍
Selenium 是一个用于自动化Web应用程序测试的工具,但它同样可以被用来进行网页数据的抓取(爬虫)。Selenium 通过模拟用户在浏览器中的操作(如点击、输入、滚动等)来与网页交互,并可以捕获网页的渲染结果,这对于需要JavaScript渲染的网页特别有用。
-
-
安装Selenium
首先,你需要安装Selenium库。可以通过pip安装:pip install selenium
-
-
- 下载WebDriver
Selenium需要WebDriver来与浏览器交互。WebDriver是一个浏览器特定的驱动程序,允许Selenium控制浏览器。你需要根据你的浏览器(如Chrome、Edg等)下载相应的WebDriver。
- 如何下载使用:
- 直接在网上搜索你所使用的浏览器驱动,下载和你浏览器相同版本的驱动
- 比如edg浏览器:
- 下载和你的浏览器相同的驱动
- 将下载好的驱动放在你的python.exe同一个目录下
- 或者使用时可以在代码中指定WebDriver的路径
- 下载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()
- 爬取结果
- 点击图片链接便可以查看
- 点击图片链接便可以查看