selenium自动化

228 阅读1分钟

作用:

便捷获取网站中动态加载的数据

便捷实现模拟登录

简介:基于浏览器自动化的模块

1.环境的安装 pip install selenium

2.下载浏览器的驱动

例如我的google浏览器的驱动

详细教程:1.特别说一下没有你的该版本,选个大致一样的就可以了

2.将解压的chromedriver放你的程序同一路径下

参考:chromedrive下载

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()

 

image.png