基于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官网

相关推荐
benchmark_cc1 天前
A 股、港股、美股如何建立统一的标的主数据格式?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
benchmark_cc1 天前
用 00700.HK 做港股行情清洗:字段核对、校验与个人量化开发实践
python·数据分析·pandas·量化交易·股票数据·quantdash
第九序言T2 天前
数据分析岗 Pandas 面试题 20 道(上):概念与读代码
python·数据分析·pandas·数据处理
2601_966949652 天前
如何封装 qd.klines.batch(),让批量 K 线查询函数在多个策略中复用?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
Blockbuater_drug2 天前
《经典机器学习实战》第 2 课:回归入门——环境、工具与数据准备
线性回归·pandas·scikit-learn·数据可视化·数据清洗·最小二乘法·conda环境
烂蜻蜓2 天前
Pandas入门教程(十六):常用函数速查手册——读写、清洗、选择、排序、分组与统计
pandas
quantdash_cc3 天前
个人开发者用 QuantDash 读取港股行情:00700.HK 的 Python 函数封装与校验实践
python·数据分析·pandas·量化交易·股票数据·quantdash
databook3 天前
Pandas 与 Polars:语法、性能和资源占用方面的对比
python·数据分析·pandas
桑年4 天前
四、Pandas数据处理
人工智能·python·线性代数·pandas·数据可视化·数据处理
第九序言T4 天前
Python 数据处理进阶(二十四)把脚本变成工具:argparse、logging 与定时任务
python·自动化·pandas