1.动态网页介绍
如何确定一个页面的数据是否为动态加载数据?
1.抓包工具 network 中的某个网页中的response,中返回的这个网页,在里面搜索是否有关键字 (ctrl+F )若没有,则是动态加载出来的
2.从全局搜索,然后自动定位到网站就可以找到这个动态加载的数据
2.selenium模块和爬虫的关联
1.便捷的获取网站中动态加载的数据
2.便捷实现模拟登录
3.selenium模块
selenium模块是基于浏览器自动化的一个模块。
3.1环境安装
1.pip install selenium
2.下载一个浏览器的驱动程序
下载路径:http://chromedriver.storage.googleapis.com/index.html
驱动和浏览器版本的映射关系:
自己谷歌浏览器的版本查看:
右上角【…】—>设置—>关于Chrome—>查看版本 如: 92.0.4515.107(正式版本) (64 位)
3.实例化一个浏览器对象
4.编写基于浏览器自动化的操作代码
代码 | 意义 | 例子 |
get() | 发送请求 | driver.get(‘http://www.baidu.com’) |
find系列的方法 | 标签定位 | |
send_keys(‘XXX’) | 标签交互 | input.send_keys(‘运动鞋’) |
excute_script(‘jsCode’) | 执行js程序 | driver.execute_script(‘window.scrollTo(0,document.body.scrollHeight)’) #是在页面中的Console中输入) |
back() forward() | 前进、后退 | driver.back()、driver.forward() |
quit() | 关闭浏览器 | driver.quit() |
案例1:抓取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据中的各个企业名称
#抓取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据中的各个企业名称
from selenium import webdriver
from lxml import etree
from time import sleep
# 实例化一个浏览器对象(传入浏览器的驱动)
driver = webdriver.Chrome(executable_path='./chromedriver')
#让浏览器发送一个指定url对应的请求 之前相对于静态的是使用requests.get(url)
driver.get('http://scxk.nmpa.gov.cn:81/xk/')
# 获取浏览器当前页面的页面源码数据
page_text = driver.page_source
#解析企业名称
tree = etree.HTML(page_text)
li_list = tree.xpath('//*[@id="gzlist"]/li')
for li in li_list:
factory = li.xpath('./dl/@title')[0]
print(factory)
#关闭浏览器
sleep(5)
driver.quit()
案例2.淘宝首页搜索
from selenium import webdriver
from time import sleep
from lxml import etree
driver = webdriver.Chrome(executable_path='./chromedriver')
#发送url请求
driver.get('https://www.taobao.com/')
#标签定位
| get() |发送请求 |driver.get('http://www.baidu.com')|
#标签交互
input.send_keys('运动鞋')
#===============额外的命令===========
#执行一组js程序
driver.execute_script('window.scrollTo(0,document.body.scrollHeight)') #是在页面中的Console中输入
sleep(2)
#点击搜索按钮
btn = driver.find_element_by_css_selector('.btn-search')
btn.click()
#点击搜索按钮
driver.get('http://www.baidu.com')
sleep(2)
#回退
driver.back()
sleep(2)
#前进
driver.forward()
sleep(5)
driver.quit()