python网络爬虫-selenium想要学习爬虫,如果比较详细的了解web开发的前端知识会更加容易上手,时间不够充裕,仅仅了解html的相关知识也是够用的。
准备工作:使用它肯定先要安装它,对于selenium的安装推荐使用pip,十分方便。因为我使用的是谷歌浏览器,使用前需要先配置相应的chromedriver,在此放出对应谷歌浏览器对应的80版本的chromedriver。地址 :点击下载提取码:sz2s
至于如何去安装配置,网络上有很多教程,在此不做赘述。
简要功能:使用selenium可以驱动浏览器执行特定操作,如点击,下拉等等,同时也能直接抓取网页源代码,即做到可见即可爬。
1.访问页面
通过下面这几行代码可以实现浏览器的驱动并获取网页源码,非常便捷。
from selenium import webdriverbrowser = webdriver.chrome() #声明浏览器对象browser.get('https://www.baidu.com')print(browser.page_source) #打印网页源码browser.close() #关闭浏览器2.查找节点
selenium可以驱动浏览器完成各种操作,但进行模拟点击,填写表单时,我们总要知道这些输入框,点击按钮在哪里,所以需要获取相对的节点。总共有其中寻找节点的方法,在此给出一个非常全面的学习查找节点的教程。
=单个节点=
下面以百度首页为例。通过查找源码,我们可以发现对应搜索文本框的class,name,id等属性名。
from selenium import webdriverbrowser = webdriver.chrome()browser.get('https://www.baidu.com')input = browser.find_element_by_id('kw') #获取搜索框位置input.send_keys('python') #输入内容运行代码得到如下内容,此时我们只是输入,并未进行其他操作。
=多个节点=
如果查找目标在网页中只有一个,使用find_element()方法就可了。如果有多个,举个例子,如查找多个满足条件的节点,通过html基本知识我们可以知道元素对应的id名是唯一的,像是其他的class等可以多次出现,其中对应的满足条件的倘若还用一开始的方法便只能得到第一个节点的内容,后面就不能得到,因此可以使用find_elements()。
3.节点交互
意思就是让浏览器模拟执行一些动作,常用的有:输入文字用send_keys(),清空文字用clear(),点击用click()。放个小实例。
from selenium import webdriverimport timebrowser = webdriver.chrome()browser.get('https://www.baidu.com')input = browser.find_element_by_id('kw')input.send_keys('python')time.sleep(1) #等待时间设置为1秒,方便查看input.clear() #清空搜索框input.send_keys('lol')button = browser.find_element_by_id('su')button.click() #模拟点击4.获取节点信息
因为selenium的page_source属性可以直接获取网页源码,接着就可以直接使用解析库(如正则表达式,beautiful soup等)直接提取信息,不过selenium已经直接提供了选择节点的方法了,返回的是webelement类型,它也有相关的方法提取节点信息,如文本,属性等。这也是使用它进行一点简单的爬虫非常方便的原因,代码十分简洁。
=提取属性=
使用get_attribute()方法,但前提需要先选中节点,同样以百度首页为实例,打印出百度logo的属性。
from selenium import webdriverbrowser = webdriver.chrome()browser.get('https://www.baidu.com')input = browser.find_element_by_id('s_lg_img')print(input)print(input.get_attribute(class))'''打印结果index-logo-src'''=获取文本值=
每个webelement节点都有text属性,直接调用这个属性就可以获得节点内的内容,这相当于beautiful soup中的get_text()方法。这里打开百度首页,获取搜索按钮的百度一下文本。
from selenium import webdriverbrowser = webdriver.chrome()browser.get('https://www.baidu.com')input = browser.find_element_by_id('su')print(input.text)=获取id、位置、标签名和大小=
id属性获取节点id
location属性可以获取该节点在页面中的相对位置
tag_name属性获取标签名称
size属性获取节点大小,就是宽高
5.延时等待
当我们进行网络爬虫时,请求的东西或许不会第一时间出现,此时就会抛出时间异常,因此我们需要加上延时等待避免程序中断。这里面分为显式等待和隐式等待,具体详细教程参考链接: link.
6.异常处理
进行爬虫难免会遇到异常,如超时,节点未找到等错误,此时用try except语句捕获异常,可以避免程序因此中断。
关于selenium其他的函数如对网页节点进行拖拽,切换标签页,前进与后退,选项卡管理以及对cookies相关的操作等不做详细说明,上面的知识足以进行简单的爬虫了,像是各大网页的文本值都可以很简单的抓取下来,可以做一点简单的数据分析。当然这仅对初学者是这样的,后期稍微深入会遇到需要这些函数的操作,对于小白这些就够了。
大动作--安泰新能源斩获乌兹别克斯坦470MW光伏跟踪项目
魅族Flyme的Android 11底层安排上了?
智慧园区系统将是园区向智能化建设转型的重要一步
iphone8什么时候上市?iphone8最新消息:iphone8价格再次被确认,这才是苹果的真正价格
海康机器人SC系列智能相机赋予包装行业智能制造视觉检测新标准
Python网络爬虫Selenium的简单使用
一组图,看懂6.5英寸iPhone X Plus到底会有多大
虹科免拆诊断 | 2008款宝马730Li车发动机偶尔无法起动
无线通信成为电动汽车充电基础设施的关键推动力
硬盘内部——机电一体化的神奇构造
台式数字万用表直流电压不准如何调整?
基于音频功放集成芯片LM4766实现高保真音频功放器的设计
选择合适的无线技术至关重要
如何给PDF文档部分文字添加下划线
基于μC/OS—II的智能窗控制系统软件设计
万用表METRAHIT IM XTRA的详细介绍
采用小巧,坚固封装的高功率步进栅极驱动器IC
语义分割标注:从认知到实践
微机消谐装置的通讯测试是如何完成的
Virtex UltraScale FPGA VCU108评估套件的功能介绍