前言
selenium模块是什么,有什么用?
-
便捷的获取网站中动态加载的数据
-
便捷实现模拟登录
-
基于浏览器自动化的一个模块
在使用这个模块之前,要先下载一个浏览器的驱动程序(谷歌浏览器)
下载路径:http://chromedriver.storage.googleapis.com/index.html 驱动程序和浏览器的映射关系:selenium之 chromedriver与chrome版本映射表(更新至v2.46)_灰蓝-优快云博客_chromedriver
案例
之前对药监局实现了一次公司名称抓取,因为发现该页面是ajax动态加载,无法通过直接获取首页页面数据来获得公司名称,之前选择先获取首页数据,再从中获取详情页所对应的id,再对详情页发送请求获取详情页公司名称
这次采用selenum模块实现自动获取公司名称
先实例化一个浏览器对象(传入浏览器的驱动程序),并对网站发起请求,固定写法
from selenium import webdriver from selenium.webdriver.chrome.service import Services = Service(r"./chromedriver.exe") driver = webdriver.Chrome(service=s) #让浏览器发起指定url请求 driver.get('http://scxk.nmpa.gov.cn:81/xk/')
休息3s,等待页面加载出来,之后获取浏览器当前页面的页面源码数据e
from time import sleep sleep(3) page_text=driver.page_source
利用抓包工具,解析企业名称
通过定位企业名称对应的html页面,发现其在多个li标签下,而li标签上一级标签为ul标签,但是html页面中可能有多个ul标签,但是每个ul标签的id是唯一的。
from lxml import etree tree=etree.HTML(page_text) li_list=tree.xpath('//ul[@id="gzlist"]/li') for li in li_list: name=li.xpath('./dl/@title')[0] print(name) sleep(5) driver.quit()