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

向量数据库大模型云通信

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

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

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

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

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

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

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

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

本文目录

  1. 实现结果

  2. 导入库

  3. 定义获取企业基本信息的函数

  4. 调用函数获取企业基本信息

  5. 把获取到的信息输出到csv文件中

一、实现结果

picture.image

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

picture.image

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

picture.image

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

picture.image

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

二、导入库

picture.image

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

  
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方法安装。

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

picture.image

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

具体代码如下:

  
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浏览器进入,方便查找路径):

  
https://www.qcc.com/?utm\_source=baidu1&utm\_medium=cpc&utm\_term=pzsy

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

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

picture.image

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

picture.image

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

picture.image

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

picture.image

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

picture.image

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

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

picture.image

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

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

picture.image

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

picture.image

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

  
#待输入搜索公司  
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()

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

picture.image

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

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

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

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

picture.image

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

  
#把数据输出成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('==================已完成企业信息下载==================')

得到结果:

picture.image

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

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

往期回顾:

情人节表白烟花

520表白代码合集

黑客帝国中的代码雨

逻辑回归项目实战-附Python实现代码

Python绘制米老鼠,为余生请多指教打call

Python常用函数合集1—clip函数、range函数等

六一儿童节来临,送大朋友小朋友一只最近爆火的“可达鸭”

picture.image

picture.image

扫一扫关注我

13162366985

投稿 微信号、手机号

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
从 ClickHouse 到 ByteHouse
《从ClickHouse到ByteHouse》白皮书客观分析了当前 ClickHouse 作为一款优秀的开源 OLAP 数据库所展示出来的技术性能特点与其典型的应用场景。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论