Python爬虫核心库Selenium实用笔记

33次阅读
没有评论

共计 3049 个字符,预计需要花费 8 分钟才能阅读完成。

要从经过动态渲染的网页中爬取数据,需要使用 Selenium 库打开一个模拟浏览器访问网页,然后获取渲染后的网页源代码。

实战中通常和 Requests 库结合使用,实现优势互补。如果用 Requests 库能获取到需要的网页源代码,那么优先使用 Requests 库进行爬取;如果用 Requests 库获取不到,再使用 Selenium 库进行爬取。

Selenium 安装

谷歌浏览器

首先查看谷歌浏览器的版本号。单击谷歌浏览器右上角的 ⋮ 按钮,在弹出的菜单中执行 帮助 -> 关于 Google Chrome,在弹出的页面中查看所安装的谷歌浏览器的版本号。

接着下载安装包:

找到与自己谷歌浏览器最接近的的版本,下载对应当前操作系统的安装包。

注意:Chrome 推送新版本更新要小心,因为一不小心点了升级,再运行之前写的程序,就会出现 Chrome 与 chromedriver 版本不一致的问题,导致程序无法正常运行。

最后,安装 ChromeDriver:将下载好的文件解压缩,得到可执行文件“chromedriver.exe”,将其复制到 Python 安装路径下的“Scripts”文件夹中。建议把 ChromeDriver 安装到 Python 的安装路径下,从而让 Python 能更容易地调用 ChromeDriver。

Python 安装路径查询:在命令行窗口中输入 where python 后回车,即可看到 Python 的安装路径。

在命令行窗口中输入 chromedriver 后回车,没有报错就说明 ChromeDriver 安装成功了。

火狐浏览器

geckodriver 下载地址:https://github.com/mozilla/geckodriver/releases/

安装 geckodriver:将下载好的文件解压缩,得到可执行文件“geckodriver.exe”,将其复制到 Python 安装路径下的“Scripts”文件夹中。建议把 geckodriver 安装到 Python 的安装路径下,从而让 Python 能更容易地调用 geckodriver。

验证安装

运行以下代码,能够打开浏览器,就说明安装成功了:

from selenium.webdriver import Chrome

browser = Chrome()
url = "https://www.xinpianchang.com/a12867560"
browser.get(url)

浏览器选项设置

在上面验证安装的时候,我们发现 Selenium 打开谷歌浏览器运行完后,浏览器就自动关闭了,都没看清楚。

这时,需要进行浏览器选项设置,向浏览器添加一些实验性功能选项。

from selenium import webdriver

# 打开自定义配置
options = webdriver.ChromeOptions()

# 设置浏览器不会关闭
options.add_experimental_option("detach", True)

# 禁用浏览器扩展
options.add_argument("--disable-extensions")

# 禁用浏览器弹窗
options.add_argument("--disable-popup-blocking")

# 设置浏览器 UA
options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
)

browser = webdriver.Chrome(options=options)
browser.maximize_window()

url = "https://www.xinpianchang.com/a12867560"
browser.get(url)

常用 API

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as ec  # 该模块收集了一系列的场景判断方法
from selenium.webdriver.support.wait import WebDriverWait  # 显示等待

# 打开自定义配置
options = webdriver.ChromeOptions()
# 设置浏览器不会关闭
options.add_experimental_option("detach", True)
browser = webdriver.Chrome(options=options)

url = "https://www.xinpianchang.com/a12867560"
browser.get(url)  # 打开页面

url2 = "https://www.baidu.com/"
browser.get(url2)

browser.back()  # 后退
browser.forward()  # 前进

element = browser.find_element("id", "kw")  # 找到页面中的元素
element.send_keys(" 爬虫 ")  # 向输入框发送值

element2 = browser.find_element("id", "su")
element2.click()  # 点击按钮

wait = WebDriverWait(browser, 30)  # 最长等待时间为 30 秒
# 判断某个元素是否被加到了 dom 树里,并不代表该元素一定可见
wait.until(ec.presence_of_element_located(("id", "content_left")))

content = browser.page_source  # 获取页面内容

browser.close()  # 关闭页面

Cookie

from selenium import webdriver
import json

# 打开自定义配置
options = webdriver.ChromeOptions()
# 设置浏览器不会关闭
options.add_experimental_option("detach", True)
browser = webdriver.Chrome(options=options)

url = "https://www.baidu.com/"
browser.get(url)

# 手动登录,登录后提取 cookie
cookies = browser.get_cookies()
cookies_str = json.dumps(cookies)  # 序列化

with open("cookies.txt", "w", encoding="utf-8") as f:
    f.write(cookies_str)

with open("cookies.txt", "r", encoding="utf-8") as f:
    cookies_str = f.read()

cookies = json.loads(cookies_str)

# 向浏览器注入 cookie
for cookie in cookies:
    try:
        browser.add_cookie(cookie)
    except Exception as e:
        print(e)

browser.get(url)

正文完
post-qrcode
 0
三毛
版权声明:本站原创文章,由 三毛 于2023-08-03发表,共计3049字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)