【Python爬企查查】批量下载企业工商信息

2022-11-11 14:17:11 浏览数 (1)

如果你要评估一个企业的规模有多大,经营状况如何,值不值得你进入这家企业,或者值不值得你投资,你会怎么办?

可能第一想法是上企查查搜一下企业的成立时间、实缴资本、人员规模、所属地区、所属行业等基本工商信息。

对企业做一个基本的评估。

然后更进一步对企业的司法、税务、涉诉、经营情况、股东变更等信息做一个更深入的挖掘。

但如果要你评估的是100万家企业,你也一个一个去搜,再把企查查上的基本信息复制下来吗?

这看起来是一个很漫长且枯燥的事情……

本文和你一起来探索用Python爬企查查,批量获取企业的工商信息,并自动下载为Excel文件。

接下来一起看下实现步骤吧。

本文目录

  1. 实现结果
  2. 导入库
  3. 定义获取企业基本信息的函数
  4. 调用函数获取企业基本信息
  5. 把获取到的信息输出到csv文件中

一、实现结果

比如你想评估武汉中粮肉食品有限公司等一批公司,其中一家公司在企查查上原始工商信息如下:

通过爬虫后得到的打印信息如下(可和网页上的原始信息进行一致性对比):

通过爬虫后得到的Excel信息如下:

接下来一起看下具体的实现步骤吧。

二、导入库

为了代码的整洁性,以及方便统一安装,首先导入本文需要加载的库。

代码语言:javascript复制
import time
import xlrd
import random
import numpy as np
from xlutils.copy import copy
from selenium import webdriver
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains

如果你有些库还没有安装,导致运行代码时报错,可以在Anaconda Prompt中用pip方法安装。

三、定义获取企业基本信息的函数

接着定义获取基本信息的函数,为了分割的准确性,先获取工商信息表格中的行,再分离获取每个变量。

具体代码如下:

代码语言:javascript复制
def basic_nes(herf1):
    driver.get(herf1) #进入新的网址
    time.sleep(20)  #暂停20s
    ###############################基本信息##############################################
    xy_com_name = driver.find_element_by_xpath('//*[@id="cominfo"]/div[2]/table/tr[1]').text
    #获取统一信用代码和公司名称
    xydm = xy_com_name.split('n')[0]
    com_name = xy_com_name.split('n')[1]
    unif_social_crd_code_f = xydm.split(' ')[1]
    #统一社会信用代码
    com_name_f = com_name.split(' ')[1]
    #公司名称
    fr_zt_date = driver.find_element_by_xpath('//*[@id="cominfo"]/div[2]/table/tr[2]').text
    #获取法人姓名、登记状态、成立日期
    artf_person = fr_zt_date.split('>')[0]
    artf_person_f = artf_person.split(' ')[1].split('n')[0]
    #法人姓名
    reg_form_date = fr_zt_date.split('>')[1]
    reg_form_f = reg_form_date.replace('n', '').split(' ')[1]
    #登记状态
    open_date_f = reg_form_date.replace('n', '').split(' ')[3]
    #成立日期
    reg_sj_hz_date = driver.find_element_by_xpath('//*[@id="cominfo"]/div[2]/table/tr[3]').text
    #注册资本、实缴资本、核准日期
    reg_cap_f = reg_sj_hz_date.split(' ')[1]
    #注册资本
    cap_pad_f = reg_sj_hz_date.split(' ')[3]
    #实缴资本
    chek_date_f = reg_sj_hz_date.split(' ')[5]
    #核准日期
    com_type_ns = driver.find_element_by_xpath('//*[@id="cominfo"]/div[2]/table/tr[5]').text
    #企业类型、纳税类型
    com_type_f = com_type_ns.split(' ')[1]
    #企业类型
    pay_tax_f = com_type_ns.split(' ')[7]
    #纳税类型
    indust_region = driver.find_element_by_xpath('//*[@id="cominfo"]/div[2]/table/tr[6]').text
    #所属行业、所属地区
    indust_f = indust_region.split(' ')[1]
    #所属行业
    region_f = indust_region.split(' ')[3]
    #所属地区
    peop_insur_num = driver.find_element_by_xpath('//*[@id="cominfo"]/div[2]/table/tr[7]').text
    #人员规模和参保人数
    peop_num_f = peop_insur_num.split(' ')[1]
    #人员规模
    insur_num_f = peop_insur_num.split(' ')[3]
    #参保人数
    brif_indc = driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[2]/div/div[1]/div[2]/div[2]/div[3]/div[4]/span').text
    brif_indc_f = brif_indc.split(':')[1]
    brif_indc_f = brif_indc_f.replace(' ', '')
    #公司简介
    ###############################基本信息##############################################
    #统一社会信用代码、公司名称、法人姓名、登记状态、成立日期、注册资本、实缴资本、核准日期、企业类型、纳税类型、所属行业、所属地区、人员规模、参保人数
    date = list([unif_social_crd_code_f])
    #统一社会信用代码
    date.append(com_name_f)
    #公司名称
    date.append(artf_person_f)
    #法人姓名
    date.append(reg_form_f)
    #登记状态
    date.append(open_date_f)
    #成立日期
    date.append(reg_cap_f)
    #注册资本
    date.append(cap_pad_f)
    #实缴资本
    date.append(chek_date_f)
    #核准日期
    date.append(com_type_f)
    #企业类型
    date.append(pay_tax_f)
    #纳税类型
    date.append(indust_f)
    #所属行业
    date.append(region_f)
    #所属地区
    date.append(peop_num_f)
    #人员规模
    date.append(insur_num_f)
    #参保人数
    date.append(brif_indc_f)
    #公司简介
    print(date)
    return date

可能有些朋友不是很清楚上述代码driver.find_element_by_xpath中的参数是从何而来,接下来进行一个详细的说明。

回想一下,我们在电脑中找文件的时候,你是不是通过文件夹的路径依次点击找到该文件?

网页中也有类似路径。

可以先进入如下企查查的官方首页(建议使用google浏览器进入,方便查找路径):

代码语言:javascript复制
https://www.qcc.com/?utm_source=baidu1&utm_medium=cpc&utm_term=pzsy

输入你想查找的企业名称,比如:武汉中粮肉食品有限公司(只是举例,无任何实际意义)。

进入如下页面,点击查一下。

可以看到如下页面,再点击进入第一家公司的链接。

就可以进入到如下待获取工商信息的页面。

接着同时按键盘上的Shift、Ctrl和I,得到如下界面:

再同时按键盘上的Ctrl和R,得到如下界面:

再依次点击图中标红的Elements和箭头,并把鼠标移动到你想要获取的信息上去。

就可以看到左边标蓝部分信息和它右边对应的Elements。

接着用鼠标点击蓝色信息,右边Elements中的灰色部分就固定住了。

然后把鼠标放到Elements中的灰色部分上去,依次点击鼠标右键——选择Copy——选择Copy Xpath即可获取参数。

四、调用函数获取基本信息

接着在corps中输入你想查找基本信息的企业名称,用循环语句依次调用第三小节中写好的函数获取基本信息。

代码语言:javascript复制
#待输入搜索公司
corps = ['武汉中粮肉食品有限公司',
'正大食品(宿迁)有限公司',
'中粮家佳康(吉林)有限公司',
'伊犁德策商贸有限公司',
'成都运荔枝科技有限公司',
'湖北沙洋正邦现代农业有限公司',
'新疆梅花氨基酸有限责任公司',
'中粮家佳康(盐城)有限公司',
'湖南临武正邦养殖有限公司安仁分公司',
'烟台市益豚生态农业有限公司',
'贵州日泉农牧有限公司',
'芮城温氏畜牧有限公司',
'绵阳双胞胎猪业有限公司',
'云南神农陆良猪业有限公司',
'朔州新好农牧有限公司',
'连云港立华牧业有限公司',
'贵州湄潭日泉农牧有限公司',
'靖州温氏畜牧有限公司',
'中粮家佳康(河南)有限公司',
'浙江一海农业发展有限公司',
'青岛鲜生活科技服务有限公司',
'襄阳正大农牧食品有限公司',
'宣威双胞胎猪业有限公司',
'新民金泰扬翔农牧有限责任公司',
'萍乡双胞胎猪业有限公司',
'泰安汉世伟食品有限公司',
'甘肃新希望六和农牧有限公司',
'黑山新六农牧科技有限公司',
'全南现代牧业有限公司',
'潜江正邦汇联饲料有限公司',
'中粮家佳康(江苏)有限公司东台分公司',
'灌南温氏食品有限公司',
'甘肃天康农牧科技有限公司永昌分公司',
'江苏全稳康源农业发展有限公司',
'湖北正大畜禽有限公司',
'中粮家佳康(赤峰)有限公司',
'沈阳恒丰源扬翔种猪繁育有限公司',
'甘肃天康农牧科技有限公司华家沟分公司',
'宜宾广联养殖有限公司长宁分公司'
]
#待输入搜索公司
#corps = ['广州海洋勘探开发总公司', '广东车海洋环保科技有限公司', '广东粤新海洋工程装备股份有限公司', '广东省海洋工程职业技术学校(广东省海洋工程技工学校)',]
date_f = list()
for i in range(len(corps)):
    #模拟使用Chrome浏览器登陆
    options = webdriver.ChromeOptions()
    options.add_argument("--disable-blink-features=AutomationControlled")  
    driver =  webdriver.Chrome(options=options)
    driver.implicitly_wait(10)
    #打开搜索页
    driver.get('https://www.qcc.com/?utm_source=baidu1&utm_medium=cpc&utm_term=pzsy')
    time.sleep(20)  # 暂停20s
    #待输入搜索公司
    corp = corps[i]
    driver.find_element_by_id('searchKey').clear()         #清空搜索框
    driver.find_element_by_id('searchKey').send_keys(corp) #在搜索框中输入查询企业名单
    #wait = ui.WebDriverWait(driver,5)
    #wait.until(lambda drivers: driver.find_element_by_xpath("/html/body/div/div[2]/section[1]/div/div/div/div[1]/div/div/span/button"))
    next_btn = driver.find_element_by_xpath('/html/body/div/div[2]/section[1]/div/div/div/div[1]/div/div/span/button')
    driver.execute_script("arguments[0].click();", next_btn)
    time.sleep(10)
    time.sleep(np.random.randint(1, 10))
    cname = driver.find_element_by_xpath('//a[@class="title copy-value"]').text
    href1 = None
    while 1:
        try:
            href1 = driver.find_element_by_xpath('//a[@class="title copy-value"]').get_attribute("href")
            print('====================', corp, '==================')
            print(href1)
            if href1 is not None:
                break
        except:
            time.sleep(np.random.randint(1, 2))   
    cnt = 0
    while 1:
        cnt  = 1
        if cnt<5:
            try:
                date_f.append(basic_nes(href1))
                break
            except:
                pass
        else:
            print('请单独对',corp, '的信息进行获取')
            break
    driver.close()

运行该段代码得到的结果如下:

由于获取查一下按钮的地方有反爬措施,查了比较多的资料才最终解决。

而且在进入搜索子目录的时候也遇到找不到相应xpath路径的困难,最终通过定义死循环的方式进行了解决。

希望文中的代码对在爬企查查遇到困难的朋友有一定的借鉴意义,有别的解决方案也可以到公众号中和我一起探讨。

五、把获取到的信息输出到csv文件中

最后把获取到的信息输出到Excel文件中,代码如下:

代码语言:javascript复制
#把数据输出成excel
import os 
import pandas as pd

os.chdir(r'F:公众号55.爬企查查')
date_qcc =  pd.DataFrame(date_f)
date_qcc.columns = ['统一社会信用代码',
'公司名称',
'法人姓名',
'登记状态',
'成立日期',
'注册资本',
'实缴资本',
'核准日期',
'企业类型',
'纳税类型',
'所属行业',
'所属地区',
'人员规模',
'参保人数',
'公司简介'
]
date_qcc.to_csv("date_qcc_0605.csv", encoding='gbk')
print('==================已完成企业信息下载==================')

得到结果:

这段代码的作用是把获取到的信息转成DataFrame,并输出到相应文件夹中。

至此,在Python中批量获取企业在企查查中的工商信息已讲解完毕,把文章分享给身边更多有需要的朋友吧。

0 人点赞