Python爬虫从入门到放弃python 爬虫服务

python爬虫从入门到放弃之十:selenium库

2019-07-14  本文已影响69人  52d19f475fe5

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:通过标签的名称提取
# 如<h1>你好,来爬我吧!</h1> 
# 可以使用find_element_by_tag_name('h1')

find_element_by_class_name:通过标签的class属性提取
# 如<h1 class="title">你好,来爬我吧!</h1>
# 可以使用find_element_by_class_name('title')

find_element_by_id:通过标签的id属性提取
# 如<h1 id="title">你好,来爬我吧!</h1> 
# 可以使用find_element_by_id('title')

find_element_by_name:通过标签的name属性提取
# 如<h1 name="hello">你好,来爬我吧!</h1> 
# 可以使用find_element_by_name('hello')

# 以下两个方法可以提取标签中的超链接——
find_element_by_link_text:通过链接文本获取超链接
# 如<a href="spidermen.html">你好,来爬我吧!</a>
# 可以使用find_element_by_link_text('你好,来爬我吧!')

find_element_by_partial_link_text:通过链接的部分文本获取超链接
# 如<a href="https://localprod.pandateacher.com/python-manuscript/hello-spiderman/">你好,来爬我吧!</a>
# 可以使用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
<class 'selenium.webdriver.remote.webelement.WebElement'>
评论:我喜欢的你 就像含笑梅一直在春季散发出诱人的苹果香气 我喜欢的你 就像迎春花在校园四处蔓延俏皮着数不尽的雨 我喜欢的你 就像洋槐花优美着某种姿态站立风中持续甜蜜 我喜欢的你 还像池中的荷花 院子的桂花 篱笆外的栀子花 反正 我喜欢你的样子 要么是花像你 要么是你像花 要么就是 花 都无法诠释我心中 最美的你

<class 'selenium.webdriver.remote.webelement.WebElement'>
评论:我想留着西瓜最中间的一勺,掺杂着巧克力屑的奶油蛋糕,草莓曲奇的第一口,双皮奶的最上层,偷喝妹妹奶粉的最后一口,所有我见过最甜蜜的。却没有甜过有我所有喜欢的样子的你,你眼中的只有最喜欢你的我。

selenium获取网页源代码

除了用selenium解析与提取数据,还有一种解决方案,那就是,使用selenium获取网页,返回的数据类型是<class 'str'>,这样可以直接交给其它库来解析和提取。

范例代码:

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入门使用

上一篇下一篇

猜你喜欢

热点阅读