小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
前言
很多时候,通过js进行动态渲染的数据并不是直接返回明文,而是通过一些加密算法进行了处理,导致我们无法获取到正确的数据。对此,我们可以通过Selenium自动化测试框架,模拟浏览器进行实现真正的“可见即可爬”。
原理
Selenium是通过模仿浏览器行为,selenium会通过打开一个浏览器,然后执行我们实现设置好的操作事件,从而实现数据获取。
版本
Selenium存在两个不同版本
Selenium RC,Remote Control:传统 Selenium 框架。
Selenium Webdriver:全新自动化接口,突破了 Selenium 1 的一些限制。
我们常用的版本是Selenium Webdriver,后面介绍也将选择该版本。
流程
- 创建并且发送给浏览器的驱动;
- 驱动中包含一个HTTP Server,用于接收http请求;
- HTTP Server根据请求操控浏览器执行步骤;
- 浏览器将步骤执行结果返回给HTTP Server;
- HTTP Server将结果返回给Selenium脚本。
安装
- 安装selenium库
执行下列命令:
pip install selenium
复制代码
- 安装chrome驱动
(限windows)下载chromedrive.exe的驱动程序,然后把它复制到python或env的scripts目录下。
使用
from selenium import webdriver
from selenium.webdriver.chrome.options import Options from bs4 import BeautifulSoup
url = r"https://juejin.cn/"
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get(url)
html = driver.page_source
soup=BeautifulSoup(html,"lxml")
# 后面使用BeautifulSoup进行提取
复制代码
总结
Selenium的优势在于,其可以通过sleep等待加载,从而可以无视js上的逻辑;
但是它也存在一个致命的缺点:容易被检测出来,因此使用上限制较大。




近期评论