基于DrissionPage的企查查数据采集器

背景

为引导信贷资金快速直达基层小微企业,由金融监管总局、国家发展改革委牵头,建立了支持小微企业融资协调工作机制,地方相应建立工作机制,从供需两端发力,统筹解决小微企业融资难和银行放贷难的问题。当地政府积极响应,积极向银行提供可能有融资需求的当地小微企业名单,名单所有内容均为公开信息,仔细分析名单后发现,部分企业已注销或处于其他异常状态,所有企业均无企业主联系方式,故本文主要解决两个问题:(1)企业状态;(2)企业联系方式。本文使用DrissionPage自动化工具在企查查上获取上诉企业信息。具体实现方法如下:

一、查询关键词

观察数据后发现:(1)除了带"*"号的个体工商户名称不唯一以外,其余企业名称均唯一;(2)部分企业无工商注册号,所有企业均有唯一的统一社会信用代码,但名单中未提供。因此,除了带"*"号的个体工商户使用工商注册号查询,其余企业均使用企业名称查询。

python 复制代码
search_data=[]
for i in range(len(company_name)):
    if "*" in company_name[i]:
        search_data.append(company_number[i])
    else:
        search_data.append(company_name[i])
print("查询企业数量:",len(search_data))

二、登录

打开浏览器,创建新的标签页,并输入企查查网址(https://www.qcc.com/),使用手机企查查app手动扫码登录。

python 复制代码
#导入用于控制浏览器的类Chromium
from DrissionPage import Chromium
from DrissionPage import ChromiumOptions
import pandas as pd
import time
#创建配置对象
co=ChromiumOptions()
#设置不加载图片
co.no_imgs(False)
#创建一个Chromium对象,用于连接浏览器
browser=Chromium(addr_or_opts=co)
#获取一个标签页(tab)对象。
tab=browser.get_tab()
#打开企查查网页
tab.get('https://www.qcc.com/')
flag=True
#预登录功能(检查登录是否成功)
while flag:
    check=input("是否登录成功(y/n?):")
    if check=="y":
        print("登录成功")
        flag=False

三、获取数据

python 复制代码
''
获取如下信息:
1、企业状态;
2、电话。
'''
data_matrix=[]
#创建一个df用于存放获取的数据
n=0
for i in search_data[700:900]:
    data_list=[]
    data_list.append(i)
    # 检测是否出现验证码
    try:
        tab.ele("@class=btn btn-primary captcha-btn").click()
        flag1 = True
        while flag1:
            captcha = input("出现验证码,是否通过验证(y/n?):")
            if captcha == "y":
                print("验证成功")
                flag1 = False
    except Exception as e:
        print("未出现验证码,继续获取数据。")
    websit = "https://www.qcc.com/web/search?key=" + i
    search_tab=tab.get(websit)
    if not search_tab:
        break
    n+=1
    print("查询成功:",n)
    try:
        nstatus=tab.ele("@class=nstatus text-success").text
        data_list.append(nstatus)
    except Exception as e:
        data_list.append("异常")
    try:
        phone_number=tab.ele("xpath://div/span[@class='f tel']/span").text
        data_list.append(phone_number)
    except Exception as e:
        data_list.append("无电话")
    print(data_list)
    data_matrix.append(data_list)
if data_matrix !=[]:
    data=pd.DataFrame(data_matrix).to_excel("output.xlsx")

验证码

1、频繁访问网页会弹出验证码,由于验证码过于复杂,本文采取人工验证的方式通过验证,即当页面中出现验证码时,人工通过验证后,继续获取数据。

get()

该方法用于跳转到一个网址。当连接失败时,程序会进行重试。tab.get()函数返回bool值,网页加载失败后,保存之前获取到的数据,并结束程序。

返回类型 说明
bool 访问是否成功

参考文献

DrissionPage官网

相关推荐
Calihen的学习日志14 小时前
【Pandas】3.1-数据预处理:列的基本操作
python·pandas
Source.Liu1 天前
【Python自动化】 21.2 Pandas 读取 Excel 时的 dtype 参数完全指南
python·自动化·pandas
Source.Liu1 天前
【Python自动化】 21 Pandas Excel 操作完整指南
python·excel·pandas
Source.Liu2 天前
【Python自动化】 21.1 Pandas 读取 Excel 文件的完整指南
python·自动化·pandas
偷心伊普西隆3 天前
Pandas DataFrame 指南
python·数据分析·pandas
chad__chang9 天前
Pandas的数据结构
数据结构·pandas
老歌老听老掉牙11 天前
Pandas DataFrame 列数操作完全指南
python·pandas
万粉变现经纪人12 天前
如何解决pip安装报错ModuleNotFoundError: No module named ‘websockets’问题
ide·pycharm·beautifulsoup·pandas·fastapi·pip·httpx
偷心伊普西隆15 天前
Python Excel 通用筛选函数
python·excel·pandas
高级测试工程师欧阳16 天前
python中selenium怎么使用
python·pandas