Python爬虫:输入公司名称,爬取企查查网站中的公司信息

您所在的位置:网站首页 帮我查查中国地图 Python爬虫:输入公司名称,爬取企查查网站中的公司信息

Python爬虫:输入公司名称,爬取企查查网站中的公司信息

2024-07-16 11:50:40| 来源: 网络整理| 查看: 265

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

以下文章来源于Python爬虫数据分析挖掘 ,作者:李运辰

Python爬虫:输入公司名称,爬取企查查网站中的公司信息

 

根据输入的公司名称来爬取企查查网站中公司的详细信息 1、获取headers2、登录成功后,可根据输入的公司名称进行查询操作,得到所需要的内容。3、将获取到的文本进行文本特殊化处理,并将其汇总成一个dataframe,方便后面保存为csv4、输入公司名称5、最后执行此代码,查询companys列表中所有公司名称的详细信息并保存为csv。 1、获取headers

1、进入企查查官网进行注册并登录。2、然后按F12弹出开发者工具,点击Network,然后你会看到企查查这个网址,点击一下

Python爬虫:输入公司名称,爬取企查查网站中的公司信息

 

然后可以找到我们需要复制的header,这是非常关键的步骤,切记这个header是自己注册之后登录成功所获取的header,这样方便后面保存一次之后就可以在一定时间内无限访问网址进行查询的操作。

Python爬虫:输入公司名称,爬取企查查网站中的公司信息

 

from bs4 import BeautifulSoup import requests import time # 保持会话 # 新建一个session对象 sess = requests.session() # 添加headers(header为自己登录的企查查网址,输入账号密码登录之后所显示的header,此代码的上方介绍了获取方法) afterLogin_headers = {'User-Agent': '此代码上方介绍了获取的方法'} # post请求(代表着登录行为,登录一次即可保存,方便后面执行查询指令) login = {'user':'自己注册的账号','password':'密码'} sess.post('https://www.qcc.com',data=login,headers=afterLogin_headers)

 

整段代码的含义为:伪装成用户进行登录行为(返回200状态码代表着登录成功)。

2、登录成功后,可根据输入的公司名称进行查询操作,得到所需要的内容。 def get_company_message(company): # 获取查询到的网页内容(全部) search = sess.get('https://www.qcc.com/search?key={}'.format(company),headers=afterLogin_headers,timeout=10) search.raise_for_status() search.encoding = 'utf-8' #linux utf-8 soup = BeautifulSoup(search.text,features="html.parser") href = soup.find_all('a',{'class': 'title'})[0].get('href') time.sleep(4) # 获取查询到的网页内容(全部) details = sess.get(href,headers=afterLogin_headers,timeout=10) details.raise_for_status() details.encoding = 'utf-8' #linux utf-8 details_soup = BeautifulSoup(details.text,features="html.parser") message = details_soup.text time.sleep(2) return message

 

上面的代码代表着执行了两个步骤。

①查询某公司②点击进入第一位搜索结果的新网站,并返回该网址的文本内容。 3、将获取到的文本进行文本特殊化处理,并将其汇总成一个dataframe,方便后面保存为csv import pandas as pd def message_to_df(message,company): list_companys = [] Registration_status = [] Date_of_Establishment = [] registered_capital = [] contributed_capital = [] Approved_date = [] Unified_social_credit_code = [] Organization_Code = [] companyNo = [] Taxpayer_Identification_Number = [] sub_Industry = [] enterprise_type = [] Business_Term = [] Registration_Authority = [] staff_size = [] Number_of_participants = [] sub_area = [] company_adress = [] Business_Scope = [] list_companys.append(company) Registration_status.append(message.split('登记状态')[1].split('\n')[1].split('成立日期')[0].replace(' ','')) Date_of_Establishment.append(message.split('成立日期')[1].split('\n')[1].replace(' ','')) registered_capital.append(message.split('注册资本')[1].split('人民币')[0].replace(' ','')) contributed_capital.append(message.split('实缴资本')[1].split('人民币')[0].replace(' ','')) Approved_date.append(message.split('核准日期')[1].split('\n')[1].replace(' ','')) try: credit = message.split('统一社会信用代码')[1].split('\n')[1].replace(' ','') Unified_social_credit_code.append(credit) except: credit = message.split('统一社会信用代码')[3].split('\n')[1].replace(' ','') Unified_social_credit_code.append(credit) Organization_Code.append(message.split('组织机构代码')[1].split('\n')[1].replace(' ','')) companyNo.append(message.split('工商注册号')[1].split('\n')[1].replace(' ','')) Taxpayer_Identification_Number.append(message.split('纳税人识别号')[1].split('\n')[1].replace(' ','')) try: sub = message.split('所属行业')[1].split('\n')[1].replace(' ','') sub_Industry.append(sub) except: sub = message.split('所属行业')[1].split('为')[1].split(',')[0] sub_Industry.append(sub) enterprise_type.append(message.split('企业类型')[1].split('\n')[1].replace(' ','')) Business_Term.append(message.split('营业期限')[1].split('登记机关')[0].split('\n')[-1].replace(' ','')) Registration_Authority.append(message.split('登记机关')[1].split('\n')[1].replace(' ','')) staff_size.append(message.split('人员规模')[1].split('人')[0].split('\n')[-1].replace(' ','')) Number_of_participants.append(message.split('参保人数')[1].split('所属地区')[0].replace(' ','').split('\n')[2]) sub_area.append(message.split('所属地区')[1].split('\n')[1].replace(' ','')) try: adress = message.split('经营范围')[0].split('企业地址')[1].split('查看地图')[0].split('\n')[2].replace(' ','') company_adress.append(adress) except: adress = message.split('经营范围')[1].split('企业地址')[1].split()[0] company_adress.append(adress) Business_Scope.append(message.split('经营范围')[1].split('\n')[1].replace(' ','')) df = pd.DataFrame({'公司':company,\ '登记状态':Registration_status,\ '成立日期':Date_of_Establishment,\ '注册资本':registered_capital,\ '实缴资本':contributed_capital,\ '核准日期':Approved_date,\ '统一社会信用代码':Unified_social_credit_code,\ '组织机构代码':Organization_Code,\ '工商注册号':companyNo,\ '纳税人识别号':Taxpayer_Identification_Number,\ '所属行业':sub_Industry,\ '企业类型':enterprise_type,\ '营业期限':Business_Term,\ '登记机关':Registration_Authority,\ '人员规模':staff_size,\ '参保人数':Number_of_participants,\ '所属地区':sub_area,\ '企业地址':company_adress,\ '经营范围':Business_Scope}) return df

 

这段代码是对获取到的文本内容进行文本识别处理,只能处理大部分的内容,可能会有极个别的是空值,大家有兴趣可以自己重写。

4、输入公司名称

这里只是写个案例,所以随便写了个列表,一般跑自己代码的是读取自己的csv文件关于公司名称的那一列,然后转为列表)

# 测试所用 companys = ['深圳市腾讯计算机系统有限公司','阿里巴巴(中国)有限公司'] # 实际所用 # df_companys = pd.read_csv('自己目录的绝对路径/某某.csv') # companys = df_companys['公司名称'].tolist()

 

5、最后执行此代码,查询companys列表中所有公司名称的详细信息并保存为csv。 for company in companys: try: messages = get_company_message(company) except: pass else: df = message_to_df(messages,company) if(company==companys[0]): df.to_csv('自己目录的绝对路径/某某.csv',index=False,header=True) else: df.to_csv('自己目录的绝对路径/某某.csv',mode='a+',index=False,header=False) time.sleep(1)

 

至此,就可以得到这两家公司的一些详细信息。

ps:如果大家在 soup.find_all(‘a’,{‘class’: ‘title’})[0].get(‘href’)这里遇到点错误,可能是天眼查那边更新了网页代码,大家可以根据这个操作来更新代码。

①按F12进入开发者调试页面

Python爬虫:输入公司名称,爬取企查查网站中的公司信息

 

②就点击“深圳市腾讯计算机系统有限公司”这个点击操作而言,右击,然后选择“检查”选项,然后就可以看到开发者调试页面那里也自动跳转到了相关的位置。

Python爬虫:输入公司名称,爬取企查查网站中的公司信息

 

③我们可以看到,这是一个a标签,class为title的html代码,所以,如果报错,可根据这个操作更换。比如,class改为了company_title,那代码也可对应的改为:soup.find_all(‘a’,{‘class’: ‘company_title’})[0].get(‘href’)

Python爬虫:输入公司名称,爬取企查查网站中的公司信息

 

最后,大家需要注意的是,爬取的时候需要适当的设置一下睡眠时间,不然会被检测到是爬虫机器人在操作,可能会弹出弹窗让你验证,这样会导致循环被中断。第二个就是某个时间段爬取量尽量不要太大,不然也是会被检测到的。

此处贴上完整代码,大家可参考着学习BeautifuSoup的妙用哦。

from bs4 import BeautifulSoup import requests import time # 保持会话 # 新建一个session对象 sess = requests.session() # 添加headers(header为自己登录的企查查网址,输入账号密码登录之后所显示的header,此代码的上方介绍了获取方法) afterLogin_headers = {'User-Agent': '此代码上方介绍了获取的方法'} # post请求(代表着登录行为,登录一次即可保存,方便后面执行查询指令) login = {'user':'自己注册的账号','password':'密码'} sess.post('https://www.qcc.com',data=login,headers=afterLogin_headers) def get_company_message(company): # 获取查询到的网页内容(全部) search = sess.get('https://www.qcc.com/search?key={}'.format(company),headers=afterLogin_headers,timeout=10) search.raise_for_status() search.encoding = 'utf-8' #linux utf-8 soup = BeautifulSoup(search.text,features="html.parser") href = soup.find_all('a',{'class': 'title'})[0].get('href') time.sleep(4) # 获取查询到的网页内容(全部) details = sess.get(href,headers=afterLogin_headers,timeout=10) details.raise_for_status() details.encoding = 'utf-8' #linux utf-8 details_soup = BeautifulSoup(details.text,features="html.parser") message = details_soup.text time.sleep(2) return message import pandas as pd def message_to_df(message,company): list_companys = [] Registration_status = [] Date_of_Establishment = [] registered_capital = [] contributed_capital = [] Approved_date = [] Unified_social_credit_code = [] Organization_Code = [] companyNo = [] Taxpayer_Identification_Number = [] sub_Industry = [] enterprise_type = [] Business_Term = [] Registration_Authority = [] staff_size = [] Number_of_participants = [] sub_area = [] company_adress = [] Business_Scope = [] list_companys.append(company) Registration_status.append(message.split('登记状态')[1].split('\n')[1].split('成立日期')[0].replace(' ','')) Date_of_Establishment.append(message.split('成立日期')[1].split('\n')[1].replace(' ','')) registered_capital.append(message.split('注册资本')[1].split('人民币')[0].replace(' ','')) contributed_capital.append(message.split('实缴资本')[1].split('人民币')[0].replace(' ','')) Approved_date.append(message.split('核准日期')[1].split('\n')[1].replace(' ','')) try: credit = message.split('统一社会信用代码')[1].split('\n')[1].replace(' ','') Unified_social_credit_code.append(credit) except: credit = message.split('统一社会信用代码')[3].split('\n')[1].replace(' ','') Unified_social_credit_code.append(credit) Organization_Code.append(message.split('组织机构代码')[1].split('\n')[1].replace(' ','')) companyNo.append(message.split('工商注册号')[1].split('\n')[1].replace(' ','')) Taxpayer_Identification_Number.append(message.split('纳税人识别号')[1].split('\n')[1].replace(' ','')) try: sub = message.split('所属行业')[1].split('\n')[1].replace(' ','') sub_Industry.append(sub) except: sub = message.split('所属行业')[1].split('为')[1].split(',')[0] sub_Industry.append(sub) enterprise_type.append(message.split('企业类型')[1].split('\n')[1].replace(' ','')) Business_Term.append(message.split('营业期限')[1].split('登记机关')[0].split('\n')[-1].replace(' ','')) Registration_Authority.append(message.split('登记机关')[1].split('\n')[1].replace(' ','')) staff_size.append(message.split('人员规模')[1].split('人')[0].split('\n')[-1].replace(' ','')) Number_of_participants.append(message.split('参保人数')[1].split('所属地区')[0].replace(' ','').split('\n')[2]) sub_area.append(message.split('所属地区')[1].split('\n')[1].replace(' ','')) try: adress = message.split('经营范围')[0].split('企业地址')[1].split('查看地图')[0].split('\n')[2].replace(' ','') company_adress.append(adress) except: adress = message.split('经营范围')[1].split('企业地址')[1].split()[0] company_adress.append(adress) Business_Scope.append(message.split('经营范围')[1].split('\n')[1].replace(' ','')) df = pd.DataFrame({'公司':company,\ '登记状态':Registration_status,\ '成立日期':Date_of_Establishment,\ '注册资本':registered_capital,\ '实缴资本':contributed_capital,\ '核准日期':Approved_date,\ '统一社会信用代码':Unified_social_credit_code,\ '组织机构代码':Organization_Code,\ '工商注册号':companyNo,\ '纳税人识别号':Taxpayer_Identification_Number,\ '所属行业':sub_Industry,\ '企业类型':enterprise_type,\ '营业期限':Business_Term,\ '登记机关':Registration_Authority,\ '人员规模':staff_size,\ '参保人数':Number_of_participants,\ '所属地区':sub_area,\ '企业地址':company_adress,\ '经营范围':Business_Scope}) return df # 测试所用 companys = ['深圳市腾讯计算机系统有限公司','阿里巴巴(中国)有限公司'] # 实际所用 # df_companys = pd.read_csv('自己目录的绝对路径/某某.csv') # companys = df_companys['公司名称'].tolist() for company in companys: try: messages = get_company_message(company) except: pass else: df = message_to_df(messages,company) if(company==companys[0]): df.to_csv('自己目录的绝对路径/某某.csv',index=False,header=True) else: df.to_csv('自己目录的绝对路径/某某.csv',mode='a+',index=False,header=False) time.sleep(1)

 

文章源

https://blog.csdn.net/qq_40694671/article/details/110671900

 



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭