如果你要评估一个企业的规模有多大,经营状况如何,值不值得你进入这家企业,或者值不值得你投资,你会怎么办?
可能第一想法是上企查查搜一下企业的成立时间、实缴资本、人员规模、所属地区、所属行业等基本工商信息。
对企业做一个基本的评估。
然后更进一步对企业的司法、税务、涉诉、经营情况、股东变更等信息做一个更深入的挖掘。
但如果要你评估的是100万家企业,你也一个一个去搜,再把企查查上的基本信息复制下来吗?
这看起来是一个很漫长且枯燥的事情……
本文和你一起来探索用Python爬企查查,批量获取企业的工商信息,并自动下载为Excel文件。
接下来一起看下实现步骤吧。
本文目录
- 实现结果
- 导入库
- 定义获取企业基本信息的函数
- 调用函数获取企业基本信息
- 把获取到的信息输出到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中批量获取企业在企查查中的工商信息已讲解完毕,把文章分享给身边更多有需要的朋友吧。