Python 爬虫进阶篇——Selenium教程(一)
在之前的推文中介绍了一些爬虫的一些方法,不过这些方法基本上都是基于静态页,然而现实中大部分的页面的都是动态渲染的。requests固然很强大,却无法执行javaScript。
一、Selenium简介
Selenium最初是一个自动化测试工具,Selenium可以驱动浏览器自动执行自定义好的逻辑代码,即通过代码完全模拟使用浏览器自动访问目标站点并操作,所以也可以用来爬虫。
二、安装
pip install selenium
既然需要使用浏览器模拟,那么自然还需要安装浏览器驱动:
- Google浏览器驱动
https://sites.google.com/a/chromium.org/chromedriver/downloadssites.google.com/a/chromium.org/chromedriver/downloads
2. Edge浏览器
Microsoft Edge Driverdeveloper.microsoft.com/en-us/microsoft-edge/tools/webdriver/
3. Firefox浏览器
https://github.com/mozilla/geckodriver/releasesgithub.com/mozilla/geckodriver/releases
4. Safari 浏览器
https://webkit.org/blog/6900/webdriver-support-in-safari-10/webkit.org/blog/6900/webdriver-support-in-safari-10/
注意:需要把下载好的文件放到python安装路径的scripts目录中才会生效。
否则,在执行webdriver.Firefox()时,就给一个
selenium.common.exceptions.WebDriverException的错误。
这里用到的是火狐浏览器的驱动,下面也将用此驱动来展开。
三、连接浏览器
执行下面的代码就会调起一个空白的浏览器窗口
from selenium import webdriverdriver=webdriver.Firefox()
结果如下:
不过需要注意的是,不是安装了驱动了就可以随意打开浏览器的,只能使用系统中已经安装的浏览器。
其它浏览器的连接浏览器的方法:
from selenium import webdriverbrowser = webdriver.Chrome()
browser = webdriver.Edge()
browser = webdriver.PhantomJS()
browser = webdriver.Safari()
其中PhantomJS是一种无界面浏览器,大家可以自行了解一下;
四、牛刀小试
那么如何自动打开指定的网址呢?
在浏览器中加载指定网址,比如:百度
from selenium import webdriverdriver=webdriver.Firefox()
# 用get打开百度页面
driver.get("http://www.baidu.com")
这里使用drvier.get(url)来打开指定的网址。
结果如下:
既然我们打开了百度,那么肯定会想让他自动搜索一下,如下:
from selenium import webdriverdriver=webdriver.Firefox()
# 用get打开百度页面
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys('python 知识学堂')
这里使用find_element_by_id的方法去定位搜索框的位置,然后用send_keys方法输入内容,模拟键盘输入。
至于为啥find_element_by_id中的值是”kw”,这个在之前的文档中有提过。
结果如下:
从结果看出,貌似还差一步,需要按一下回车键,那么怎么办呢?如下:
from selenium import webdriverdriver=webdriver.Firefox()
# 用get打开百度页面
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys('python 知识学堂')
driver.find_element_by_id("su").click()
这里使用的是click()的方法点击指定的按钮。结果如下:
其实到这里,是不是就算一个简简单单的自动化处理了。
大家可以自己运行一下试试。
上面一直用到find_element_by_id去查找元素,常用的元素定位方法如下:
find_element_by_id()
find_element_by_name()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_xpath()
find_element_by_css_selector()
注意:
1、find_element_by_xxx找的是第一个符合条件的标签,find_elements_by_xxx找的是所有符合条件的标签。
2、find_element()通用方法,它需要传入两个参数:查找方式By和值。实际上,它就是
find_element_by_id()这种方法的通用函数版本,比如
find_element_by_id(id)就等价于
find_element(By.ID, id),二者得到的结果完全一致。
Selenium 还支持xpath语法,这个在之前的基础推文中有详细的介绍,大家可以去公众号中查找
五、总结
这次就简单的介绍一下Selenium框架,以及如何使用浏览器驱动建起浏览器连接,最后通过打开百度的网址,搜索指定的内容,来展示Selenium的强大。
Python 爬虫进阶篇——Selenium教程(一)相关推荐
- Python 爬虫进阶篇-4行代码实现爬取指定网站中的全部图片实例演示及原理剖析
上一篇:Python 爬虫入门篇-如何获取网页中的图片.我们了解到了 urllib 获取图片的原理,urllib.request.urlretrieve() 就是用来获取图片的. 这一篇,我们用正则表 ...
- Python 爬虫进阶篇——diskcache缓存
在之前的python爬虫系列中介绍了几种爬取网页内容的方法以及request模块的相关内容,本次推文给大家介绍缓存相关的内容,选择的是diskcache即基于磁盘的缓存. 一.简介 DiskCache ...
- Python 爬虫进阶篇-利用beautifulsoup库爬取网页文章内容实战演示
我们以 fox新闻 网的文章来举例子,把整篇文章爬取出来. 首先是标题,通过结构可以看出来 class 为 article-header 的节点下的 h1 里的内容即是标题,通过 string 可以获 ...
- 【Python】【进阶篇】十二、Python爬虫的Xpath简明教程(十分钟入门)
目录 十二.Python爬虫的Xpath简明教程(十分钟入门) 12.1 Xpath表达式 12.2 Xpath节点 12.3 节点关系 12.4 Xpath基本语法 12.4.1 基本语法使用 12 ...
- Python爬虫4.4 — selenium高级用法教程
Python爬虫4.4 - selenium高级用法教程 综述 Headless Chrome 设置请求头 设置代理IP 常用启动项参数options设置 Cookie操作 selenium设置coo ...
- 如何学习Python爬虫[入门篇]?
这篇文章已经过去很久了,有一些学习资源链接已经失效了,还一直有小伙伴在Python的路上摸索.所以我根据自己的学习和工作经历整理了一套Python学习电子书,在公众号「路人甲TM」后台回复关键词「1」 ...
- python爬虫项目实战教学视频_('[Python爬虫]---Python爬虫进阶项目实战视频',)
爬虫]---Python 爬虫进阶项目实战 1- Python3+Pip环境配置 2- MongoDB环境配置 3- Redis环境配置 4- 4-MySQL的安装 5- 5-Python多版本共存配 ...
- python爬虫之初恋 selenium
selenium 是一个web应用测试工具,能够真正的模拟人去操作浏览器. 用她来爬数据比较直观,灵活,和传统的爬虫不同的是, 她真的是打开浏览器,输入表单,点击按钮,模拟登陆,获得数据,样样行.完全 ...
- 一文看懂Python 爬虫 进阶(三)
一文看懂Python 爬虫 进阶(三) 文章目录 一文看懂Python 爬虫 进阶(三) **猫眼电影(xpath)** **链家二手房案例(xpath)** **百度贴吧图片抓取** 这篇几乎都是代 ...
最新文章
- linux环境安装python-pip
- websocketd 实现浏览器查看服务器实时日志
- HarmonyOS之深入解析Ability的功能和使用
- pl/sql developer 设置oracle的date类型默认显示样式
- la环球乐园里的机器人_北京环球度假区发布小黄人乐园主题视频,抢鲜感受未来的欢乐体验...
- JAVA如何分段_OpenCV Java文本分段
- CentOS 7 安装及设置
- 算法导论 思考题12-1
- java设计模式工厂模式_Java中的复合设计模式
- Django中Settings中Templates的路径设置
- 相机模型(针孔、广角)
- 阿里技术专家:一文教你高效画出技术架构图
- 自动化运维---playbook(应用变量)
- 中国网络安全现状:“狼”已经来了
- 20175312陶光远 与 20175309刘雨恒 结对
- Spring中Model,ModelMap以及ModelAndView之间的区别
- Tensorflow: ImportError: libcusolver.so.8.0: cannot open shared object file: No such file or directo
- 周末读《仍然不足够》-TOC与ERP结合的经典小说
- 北大青鸟课程与思科等其它IT培训课程的区别
- python写自动脚本_用Python实现FGO自动战斗脚本
热门文章
- AWS介绍(详细好理解)
- 本地存储-cookie|localStorage|sessionStorage|indexedDB
- A+CLUB活动预告 | 2023年5月
- s2 安恒 漏洞验证工具_Struts2漏洞检查工具2018版(最新版)V2.0[带批量功能]
- DataGrid的ItemCreated和ItemDataBound事件转
- 在网页中调用摄像头实现拍照上传 - 高拍仪二次开发
- 华为手机_text是什么文件_text函数怎么使用
- uboot源码下载以及编译
- 利用matlab数米粒数量,数米粒个数和每个米粒面积的matlab算法实现(递归)。
- Linux C应用编程-1-文件IO