前言
我们之前做过一些数据是动态加载的爬取案例,如:
练习request模块中的综合案例练习异步爬虫中的爬取梨视频热门音乐板块
这些动态数据从何加载而来是需要我们通过浏览器抓包工具来找到的。
此外,我们还做过一些模拟登陆的例子。获取登录按钮链接的post请求来登录用户。
如果有那么一个模块,能够帮助我们做这些工作的话岂不是美滋滋,这就是selenium模块
什么是selenium模块
selenium模块是基于浏览器自动化的模块(代码操作浏览器)。
selenium使用流程
- 安装selenium模块
pip install selenium
- 下载浏览器驱动程序(google)
驱动和浏览器版本要对应,对应关系可以在网络上搜索
- 将下载好的驱动放入你的项目中,实例化一个浏览器对象
运行下面的代码会打开你的谷歌浏览器,如果你打不开看看是不是防火墙杀掉了
from selenium import webdriver
# 实例化一个浏览器对象
bro = webdriver.Chrome(executable_path='./chromedriver')
- 编写浏览器自动化操作代码
小试牛刀
我们故地重游一下,试试爬取药监页面的公司名
"""
故地重游:药监总局
"""
from selenium import webdriver
from lxml import etree
# 实例化一个浏览器对象
bro = webdriver.Chrome(executable_path='./chromedriver')
# 让浏览器对药监官网发起请求
url = 'http://scxk.nmpa.gov.cn:81/xk/'
bro.get(url=url)
# 获取浏览器当前页面远源码数据
# 如果是以前直接获取是得不到相关的数据
# 但是今非昔比
page_text = bro.page_source
# 我们数据解析直接开撸,解析出公司的名字
tree = etree.HTML(page_text)
company_names = tree.xpath('//ul[@id="gzlist"]/li/dl/@title')
print(company_names)
# 关闭浏览器对象
bro.quit()
我们真实的获取到了需要动态加载的数据!!!
/usr/local/bin/python3.8 /Users/soutsukyou/PyCharm_Workspace/网络爬虫/study_selenium/study_selenium01.py
/Users/soutsukyou/PyCharm_Workspace/网络爬虫/study_selenium/study_selenium01.py:8: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
bro = webdriver.Chrome(executable_path='./chromedriver')
['本溪天神生物科技有限公司', '辽宁婵泉生物药业有限公司', '淮安纵横生物科技有限公司淮阴分公司', '四川珈峻生物科技有限公司', '沈阳爱华化妆品有限公司', '广东水光科技有限公司', '珠海市傲诗美化妆品有限公司', '广州兴胜梅生物科技有限公司', '广州市金尚化妆品有限公司', '广州博养堂健康产业有限公司', '重庆小丸生物科技股份有限公司', '天津宝洁工业有限公司', '广州蔼瑞生物科技有限公司', '广州市毅尔豪化妆品有限公司', '广州益民口腔医疗科技有限公司']
进程已结束,退出代码为 0