Selenium 是一个用于自动化Web应用程序测试的工具,但它同样可以被用来进行网页数据的抓取(爬虫)。Selenium 通过模拟用户在浏览器中的操作(如点击、输入、滚动等)来与网页交互,并可以捕获网页的渲染结果,这对于需要JavaScript渲染的网页特别有用。
安装Selenium
首先,你需要安装Selenium库。可以通过pip安装:
pip install selenium
使用Selenium方法相比requests方法爬取数据要简便的多
爬取步骤:
1、指定浏览器的驱动,并通过网址请求页面
# 指定驱动
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()