selenium是什么
selenium
是什么呢?它是一个强大的Python库
它可以做什么呢?它可以用几行代码,控制浏览器,做出自动打开、输入、点击等操作,就像是有一个真正的用户在操作一样
来看一小段录屏吧,文字在视频面前会显得苍白
selenium具体能做什么
当你遇到验证码很复杂的网站时,selenium允许让人去手动输入验证码,然后把剩下的操作交给机器
而对于那些交互复杂、加密复杂的网站,selenium问题简化,爬动态网页如爬静态网页一样简单
当然selenium也有美中不足之处
由于要真实地运行本地浏览器,打开浏览器以及等待网渲染完成需要一些时间,selenium的工作不可避免地牺牲了速度和更多资源,不过,至少不会比人慢
selenium怎么用
和其它所有Python库一样,selenium需要安装,方法也很简单, 使用pip安装
pip install selenium # Windows电脑安装selenium
pip3 install selenium # Mac电脑安装selenium
selenium的脚本可以控制所有常见浏览器的操作,在使用之前,需要安装浏览器的驱动
我推荐的是Chrome浏览器,打开下面的链接,就可以下载Chrome的安装包了,Windows和Mac都有
https://localprod.pandateacher.com/python-manuscript/crawler-html/chromedriver/ChromeDriver.html
- 备用方法参考如下:
Mac电脑一键安装方法:
打开Mac终端terminal ,输入命令:
curl -s https://localprod.pandateacher.com/python-manuscript/crawler-html/chromedriver/chromedriver-for-Macos.sh | bash
等待程序安装完成就好了
Windows系统安装方法:
百度云盘备用地址下载:
链接:https://pan.baidu.com/s/1GvPPIz8We0Serc1woW0wVQ
提取码:77ku
下载win32.zip,解压得到chromedriver.exe文件,将这个文件拷贝到python的安装根目录:如python37(看自己版本,版本是python36就是目录python36)
selenium功能详解
设置浏览器引擎
使用第三方的Python库,首先要调用它。selenium有点不同,除了调用,还需要设置浏览器引擎
范例代码:
import time
from selenium import webdriver #从selenium库中调用webdriver模块
driver = webdriver.Chrome() # 设置引擎为Chrome,真实地打开一个Chrome浏览器
driver.get('https://y.qq.com') # 打开网页
time.sleep(1)
driver.close() # 关闭浏览器
driver
是一个实例化的谷歌浏览器
get(URL)
方法用来打开指定URL的网页
当一个网页被打开,网页中的数据就加载到了浏览器中,也就是说,数据被我们获取到了
driver.close()
是关闭浏览器驱动,每次调用了webdriver之后,都要在用完它之后关闭它
以上代码实现:一个浏览器自动启动,并打开一个网页,停留一秒之后,浏览器关闭
解析与提取数据
上面说了,driver = webdriver.Chrome()
是实例化谷歌浏览器,那么解析数据就是由浏览器本身driver来完成的,而它也具备提取数据的方法
- 提取标签的方法
# 以下四个方法可以提取标签——
find_element_by_tag_name:通过标签的名称提取
# 如你好,来爬我吧!
# 可以使用find_element_by_tag_name('h1')
find_element_by_class_name:通过标签的class属性提取
# 如你好,来爬我吧!
# 可以使用find_element_by_class_name('title')
find_element_by_id:通过标签的id属性提取
# 如你好,来爬我吧!
# 可以使用find_element_by_id('title')
find_element_by_name:通过标签的name属性提取
# 如你好,来爬我吧!
# 可以使用find_element_by_name('hello')
# 以下两个方法可以提取标签中的超链接——
find_element_by_link_text:通过链接文本获取超链接
# 如你好,来爬我吧!
# 可以使用find_element_by_link_text('你好,来爬我吧!')
find_element_by_partial_link_text:通过链接的部分文本获取超链接
# 如你好,来爬我吧!
# 可以使用find_element_by_partial_link_text('你好')
——以上,通过find_element_by_
方法可以提取出网页中第一个符合要求的元素,如果提取全部符合要求的元素,把element换成复数elements就好了
- 提取标签中的内容
# 提取标签中文字
WebElement.text
# 提取标签中的属性值
WebElement.get_attribute('属性名')
实例展示
我们用selenium爬取QQ音乐的歌曲评论,选的歌是《甜甜的》。
https://y.qq.com/n/yqq/song/000xdZuV2LcQ19.html
代码实现:
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://y.qq.com/n/yqq/song/000xdZuV2LcQ19.html') # 访问页面
time.sleep(2)
comments = driver.find_element_by_class_name('js_hot_list').find_elements_by_class_name('js_cmt_li') # 使用class_name找到评论
print(len(comments)) # 打印获取到的评论个数
for comment in comments: # 循环
sweet = comment.find_element_by_tag_name('p') # 找到评论
print(type(sweet)) # 获取数据的类型
print ('评论:%s\n'%sweet.text) # 打印评论
driver.close() # 关闭浏览器
截取运行结果2条评论,如下:
15
评论:我喜欢的你 就像含笑梅一直在春季散发出诱人的苹果香气 我喜欢的你 就像迎春花在校园四处蔓延俏皮着数不尽的雨 我喜欢的你 就像洋槐花优美着某种姿态站立风中持续甜蜜 我喜欢的你 还像池中的荷花 院子的桂花 篱笆外的栀子花 反正 我喜欢你的样子 要么是花像你 要么是你像花 要么就是 花 都无法诠释我心中 最美的你
评论:我想留着西瓜最中间的一勺,掺杂着巧克力屑的奶油蛋糕,草莓曲奇的第一口,双皮奶的最上层,偷喝妹妹奶粉的最后一口,所有我见过最甜蜜的。却没有甜过有我所有喜欢的样子的你,你眼中的只有最喜欢你的我。
selenium获取网页源代码
除了用selenium解析与提取数据,还有一种解决方案,那就是,使用selenium获取网页,返回的数据类型是
范例代码:
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://y.qq.com/n/yqq/song/000xdZuV2LcQ19.html') # 访问页面
time.sleep(2)
pageSource = driver.page_source # 获取完整渲染的网页源代码
print(type(pageSource)) # 打印pageSource的类型
print(pageSource) # 打印pageSource
driver.close() # 关闭浏览器
selenium自动操作浏览器
要做到上面动图中显示的效果,只需要新加入两个方法就好了
- 标签的操作功能
.send_keys() # 模拟按键输入,自动填写表单
.click() # 点击元素
.clear() # 清除元素的内容
代码如下:
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://y.qq.com')
time.sleep(1)
search = driver.find_element_by_class_name('mod_search_input')
text = search.find_element_by_class_name('search_input__input')
text.send_keys('周杰伦')
time.sleep(1)
button = search.find_element_by_class_name('sprite')
button.click()
time.sleep(1)
driver.close()
上面代码中,driver.maximize_window()用来设置浏览器打开窗口全屏,其它尺寸如下代码:
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window() # 全屏
driver.get('https://y.qq.com')
time.sleep(1)
print (driver.get_window_size())
driver.set_window_size(1280,800) # 分辨率 1280*800
time.sleep(1)
print (driver.get_window_size())
driver.set_window_size(1024,768) # 分辨率 1024*768
time.sleep(1)
print (driver.get_window_size())
driver.close() #关闭浏览器
浏览器静默模式
在上面代码中,driver = webdriver.Chrome() 设置引擎为Chrome,真实地打开一个Chrome浏览器,这种设置方法可以让你看到浏览器的操作过程。
而我们在做爬虫时,通常不需要打开浏览器,爬虫的目的是爬到数据,而不是观看浏览器的操作过程,在这种情况下,就可以使用浏览器的静默模式,
它的设置方法是这样的:
# 本地Chrome浏览器的静默默模式设置:
from selenium import webdriver #从selenium库中调用webdriver模块
from selenium.webdriver.chrome.options import Options # 从options模块中调用Options类
chrome_options = Options() # 实例化Option对象
chrome_options.add_argument('--headless') # 把Chrome浏览器设置为静默模式
driver = webdriver.Chrome(options = chrome_options) # 设置引擎为Chrome,在后台默默运行
selenium总结
Selenium是一个强大的网络数据采集工具,它的优势是简单直观,而它当然也有缺点。
由于是真实地模拟人操作浏览器,需要等待网页缓冲的时间,在爬取大量数据的时候,速度会比较慢。
通常情况,在爬虫项目中,selenium
都是用在其它方法无法解决,或是很难解决的问题时,才会用到。
当然,除了爬虫,selenium
的使用场景还有很多。比如:它可以控制网页中图片文件的显示、控制CSS和JavaScript的加载与执行等等。
这里只讲了一些简单常用的操作,还想进一步学习的话,可以通过selenium的官方文档链,目前只有英文版:
https://seleniumhq.github.io/selenium/docs/api/py/api.html
还可以参考这个中文文档:
https://selenium-python-zh.readthedocs.io/en/latest/
>>>
阅读更多文章请点击以下链接:
python爬虫从入门到放弃之一:认识爬虫
python爬虫从入门到放弃之二:HTML基础
python爬虫从入门到放弃之三:爬虫的基本流程
python爬虫从入门到放弃之四:Requests库基础
python爬虫从入门到放弃之五:Requests库高级用法
python爬虫从入门到放弃之六:BeautifulSoup库
python爬虫从入门到放弃之七:正则表达式
python爬虫从入门到放弃之八:Xpath
python爬虫从入门到放弃之九:Json解析
python爬虫从入门到放弃之十:selenium库
python爬虫从入门到放弃之十一:定时发送邮件
python爬虫从入门到放弃之十二:多协程
python爬虫从入门到放弃之十三:Scrapy概念和流程
python爬虫从入门到放弃之十四:Scrapy入门使用
python爬虫从入门到放弃之十五:ScrapyScrapy爬取多个页面
python爬虫从入门到放弃之十六:Xpath简化
python爬虫从入门到放弃之十七:常见反爬手段
python爬虫已放弃,视频教程资源来领取