python 爬虫 入门 六、Selenium

Selenium本来是一个自动测试工具,用于模拟用户对网站进行操作。在爬虫领域也有其用处。

一、下载安装Selenium及附属插件

pip install Selenium

安装完成后还需要安装一个浏览器驱动,来让python能启动浏览器。

如果是Edge或者其他基于Chromium的浏览器(如下面的百分浏览器),我们先查看Chromium版本号:

这里以Edge为例,版本为126.0.2592.68,进入下面的网址,咱们就选最后一个,win版本,解压之后的exe文件就是我们需要的东西,你可以把它放在python解释器目录,项目目录或者其他你找得到的地方。

chromedriver.storage.googleapis.com/index.html

二、selenium的使用

(一)、第一个程序

先来试试第一个程序,它会使用edge打开百度(第一打开时间可能有点长(10s?),并且打开后不久就会自动关闭)然后输出抬头的数据:

python 复制代码
import time

from selenium.webdriver import Edge   # Edge 可以换成 Chrome/Firefox(火狐)/Ie/BlackBerry······

url = 'http://www.baidu.com'
web = Edge()
web.get(url)
print(web.title)
time.sleep(50)

(二)、以站酷为例

接下来,我们尝试模拟一下从站酷ZCOOL-设计师互动平台-打开站酷,发现更好的设计!中搜索"网站设计",并打开第一个和第二个文章的全过程

在selenium中,我们所有操作,看到的都是已经经过js处理过的页面,也就是说,他是所见即所得。以站酷为例,站酷首页的文章都是二次请求得到的,源代码中没有,用以下代码就能清楚看到。会输出True False,如果不是的话,尝试更改文章名或者延长time.sleep时间,以保证网站完全加载。

python 复制代码
import time

import requests
from selenium.webdriver import Edge  # Edge 可以换成 Chrome/Firefox(火狐)/Ie/BlackBerry······

headers = {
    # 用户代理,某些网站验证用户代理,微微改一下,如果提示要验证码之类的,使用它
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome"
                  "/118.0.0.0 Safari/537.36",
}

url = 'https://www.zcool.com.cn/'
web = Edge()
web.get(url)
# print(web.page_source)
time.sleep(8)
print('字体合集' in web.page_source)    # 字体合集是一个文章名
with requests.get(url=url, headers=headers) as resp:
    resp.encoding = "utf-8"  # 当页面乱码改这里
    # print(resp.text)
    print('字体合集' in resp.text)# 字体合集是一个文章名

需要模拟的行为流程

模拟代码

通过以下代码即可获取所需内容:通常来说,人怎么想,就怎么用selenium访问页面。

python 复制代码
import time

from selenium.webdriver import Edge  # Edge 可以换成 Chrome/Firefox(火狐)/Ie/BlackBerry······
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

url = 'https://www.zcool.com.cn/'
web = Edge()
web.get(url)
time.sleep(3)  # 等几秒使得网站完全加载
# 已经进入网站,找到搜索框,输入数据并回车搜索。
# By有By.ID、By.NAME、By.XPATH、By.CSS_SELECTOR等
search_box = web.find_element(By.XPATH, '//*[@id="headerSearchInput"]')  # 直接通过检查元素中的xpath获得位置
search_box.send_keys("网站设计")
# 方法一、点击搜索,
# search = web.find_element(By.CLASS_NAME, '_search-icon_1wwm7_457')
# search.click()
# 方法二,按下回车,也可以直接放一块:search_box.send_keys("网站设计",Keys.ENTER)
search_box.send_keys(Keys.ENTER)
time.sleep(3)
# 打开两个文章
img = web.find_element(By.XPATH, '//*[@id="__next"]/main/div/div/div[2]/section[2]/section/section/div[1]/div[1]')
img.click()
img = web.find_element(By.XPATH, '//*[@id="__next"]/main/div/div/div[2]/section[2]/section/section/div[2]/div[1]')
img.click()
time.sleep(2)
# 遇到不能按F12打开控制台和没有右键菜单的情况,应该是拦截了快捷键,点击地址栏然后按F12即可
# 切换窗口获得所需内容
web.switch_to.window(web.window_handles[1])
text = web.find_element(By.XPATH, '//*[@id="__next"]/main/div/section/div[1]')
print(text.text)
web.switch_to.window(web.window_handles[2])
text = web.find_element(By.XPATH, '//*[@id="__next"]/main/div/section/div[1]')
print(text.text)

总结:

selenium优点自然是使用比较简单,怎么访问网站就怎么写代码即可,但是访问速度比较慢,需要等待页面JS加载。

相关推荐
深蓝海拓14 分钟前
Pyside6(PyQT5)中的QTableView与QSqlQueryModel、QSqlTableModel的联合使用
数据库·python·qt·pyqt
无须logic ᭄22 分钟前
CrypTen项目实践
python·机器学习·密码学·同态加密
Channing Lewis35 分钟前
flask常见问答题
后端·python·flask
Channing Lewis37 分钟前
如何保护 Flask API 的安全性?
后端·python·flask
Change is good40 分钟前
selenium xpath定位一组元素中的某一个
selenium·一组元素
水兵没月2 小时前
钉钉群机器人设置——python版本
python·机器人·钉钉
我想学LINUX3 小时前
【2024年华为OD机试】 (A卷,100分)- 微服务的集成测试(JavaScript&Java & Python&C/C++)
java·c语言·javascript·python·华为od·微服务·集成测试
数据小爬虫@6 小时前
深入解析:使用 Python 爬虫获取苏宁商品详情
开发语言·爬虫·python
健胃消食片片片片6 小时前
Python爬虫技术:高效数据收集与深度挖掘
开发语言·爬虫·python
ℳ₯㎕ddzོꦿ࿐9 小时前
解决Python 在 Flask 开发模式下定时任务启动两次的问题
开发语言·python·flask