作用:
便捷获取网站中动态加载的数据
便捷实现模拟登录
简介:基于浏览器自动化的模块
1.环境的安装 pip install selenium
2.下载浏览器的驱动
例如我的google浏览器的驱动
详细教程:1.特别说一下没有你的该版本,选个大致一样的就可以了
2.将解压的chromedriver放你的程序同一路径下
3.实例化浏览器对象
固定格式
from selenium import webdriver
bro = webdriver.Chrome(executable_path="./chromedriver")
#发起请求
bro.get('http://scxk.nmpa.gov.cn:81/xk/')
4.基于浏览器自动化的代码
我们来看一下爬取药监局(该页面某些数据是通过ajax动态加载)
如果我们用requests要对主网页分析一次,子网页也分析一次,就会特别麻烦 requests:
import requests
import json
url = "http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList"
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'
}
all_data_list = []
id_list = []
#获取所有页面操作
for page in range(1,6):
page=str(page)
data = {
'on':' true',
'page': page,
'pageSize': '15',
'productName': '',
'conditionType':' 1',
'applyname': '',
'applysn': ''
}
id_json = requests.post(url=url,headers=header,data=data).json()
#print(id_json)
#获取每个企业id
for id in id_json["list"]:
id_list.append(id["ID"])
#获取企业具体数据
post_url = "http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById"
for ids in id_list:
data = {
"id":ids
}
data_json = requests.post(url=post_url,headers=header,data=data).json()
all_data_list.append(data_json)
fp = open('./all_data.json',"w",encoding="utf-8")
json.dump(all_data_list, fp, ensure_ascii=False)
print("over")
用selenium后
from selenium import webdriver
from lxml import etree
from time import sleep
bro = webdriver.Chrome(executable_path="./chromedriver")
#发起请求
bro.get('http://scxk.nmpa.gov.cn:81/xk/')
#page_source 获取当前页面返回的页面源码
page_text = bro.page_source
#解析
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)
bro.quit()