ITPub博客

首页 > 数据库 > 数据库开发技术 > 【Python爬企查查】批量下载企业工商信息

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

原创 数据库开发技术 作者:阿黎逸阳的代码 时间:2022-06-11 19:00:00 0 删除 编辑

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

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

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

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

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

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

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

接下来一起看下实现步骤吧。
本文目录
  1. 实现结果

  2. 导入库

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

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

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


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

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

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

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

二、导入库
为了代码的整洁性,以及方便统一安装,首先导入本文需要加载的库。
import timeimport xlrdimport randomimport numpy as npfrom xlutils.copy import copyfrom selenium import webdriverimport selenium.webdriver.support.ui as uifrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.common.action_chains import ActionChains

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


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

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

具体代码如下:

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

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

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

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

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

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

再依次点击图中标红的Elements和箭头,并把鼠标移动到你想要获取的信息上去。
就可以看到左边标蓝部分信息和它右边对应的Elements。

接着用鼠标点击蓝色信息,右边Elements中的灰色部分就固定住了。
然后把鼠标放到Elements中的灰色部分上去,依次点击鼠标右键——选择Copy——选择Copy Xpath即可获取参数。


四、调用函数获取基本信息
接着在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()
运行该段代码得到的结果如下:

由于获取查一下按钮的地方有反爬措施,查了比较多的资料才最终解决。
而且在进入搜索子目录的时候也遇到找不到相应xpath路径的困难,最终通过定义死循环的方式进行了解决。
希望文中的代码对在爬企查查遇到困难的朋友有一定的借鉴意义,有别的解决方案也可以到公众号中和我一起探讨。


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

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

#把数据输出成excelimport 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中批量获取企业在企查查中的工商信息已讲解完毕,把文章分享给身边更多有需要的朋友吧。

往期回顾:

情人节表白烟花

520表白代码合集
黑客帝国中的代码雨
逻辑回归项目实战-附Python实现代码
Python绘制米老鼠,为余生请多指教打call
Python常用函数合集1—clip函数、range函数等
六一儿童节来临,送大朋友小朋友一只最近爆火的“可达鸭”



扫一扫关注我

13162366985

投稿微信号、手机号

原文作者:阿黎逸阳的代码;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2020-02-15

  • 博文量
    282
  • 访问量
    130921