详解用Python爬虫获取百度企业信用中企业基本信息


Posted in Python onJuly 02, 2020

一、背景

希望根据企业名称查询其经纬度,所在的省份、城市等信息。直接将企业名称传给百度地图提供的API,得到的经纬度是非常不准确的,因此希望获取企业完整的地理位置,这样传给API后结果会更加准确。
百度企业信用提供了企业基本信息查询的功能。希望通过Python爬虫获取企业基本信息。目前已基本实现了这一需求。
本文最后会提供具体的代码。代码仅供学习参考,希望不要恶意爬取数据!

二、分析

以苏宁为例。输入“江苏苏宁”后,查询结果如下:

详解用Python爬虫获取百度企业信用中企业基本信息

经过分析,这里列示的企业信息是用JavaScript动态生成的。服务器最初传过来的未经渲染的HTML如下:

详解用Python爬虫获取百度企业信用中企业基本信息

注意其中标注出来的JS代码。有意思的是,企业基本信息都可以直接从这段JS代码中获取,无需构造复杂的参数。

详解用Python爬虫获取百度企业信用中企业基本信息

这是进一步查看的结果,注意那个“resultList”,后面存放的就是页面中的企业信息。显然,利用正则表达式提取需要的字符串,转换成JSON就可以了。

三、源码

以下代码为查询某个企业的基本信息提供了API:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Author: Wild Orange
# @Email: jixuanfan_seu@163.com
# @Date:  2020-06-19 22:38:14
# @Last Modified time: 2020-07-01 17:33:13

import requests
import re
import json

headers={'User-Agent': 'Chrome/76.0.3809.132'}

#正则表达式提取数据
re_get_js=re.compile(r'<script>([\s\S]*?)</script>')
re_resultList=re.compile(r'"resultList":(\[{.+?}\]}])')

def Get_company_info(name):
	'''
		@func: 通过百度企业信用查询企业基本信息
	'''
	url='https://xin.baidu.com/s?q=%s'%name
	res=requests.get(url,headers=headers)
	if res.status_code==200:
		html=res.text
		retVal=_parse_baidu_company_info(html)
		return retVal
	else:
		print('无法获取%s的企业信息'%name)

def _parse_baidu_company_info(html):
	'''
		@function:解析百度企业信用提供的企业基本信息
		@output: list of dict, [{},{},...]
			pid: 跳转到具体企业页面的参数
			bid: 具体企业页面URL中的参数
			name: 企业名称
			type: 企业类型
			date: 成立日期
			address: 地址
			person: 法人代表
			status: 存续状态
			regCap: 注册资本
			scope: 经营范围
	'''
	js=re_get_js.findall(html)[1]
	data=re_resultList.search(js)
	if not data:
		return
	compant_list=json.loads(data.group(1))
	
	retVal=[]
	for x in compant_list:
		regCap=x['regCap'].replace(',','')
		if regCap[-1]=='万':
			regCap=regCap[:-1]
		regCap=float(regCap)
		address=x['domicile'].replace('<em>','').replace('</em>','')
		
		temp_v={'pid':x['pid'],'bid':x['bid'],'name':x['titleName'],'type':x['entType'],'date':x['validityFrom'],\
				'address':address,'person':x['legalPerson'],'status':x['openStatus'],'regCap':regCap,\
				'scope':x['scope']}
		retVal.append(temp_v)
	return retVal

四、使用方法

直接将需要查询的企业名称传入Get_company_info:

res=Get_company_info('江苏苏宁')
	print(res)

结果:

详解用Python爬虫获取百度企业信用中企业基本信息

需要注意的是:

返回的是字典构成的数组,每个字典元素代表一家企业的信息。顺序与浏览器中显示的顺序相同。字典中参数的含义已在_parse_baidu_company_info函数的注释中说明。程序仅获取第一页的信息。如果要查询多页,可以修改源码。程序仅获取企业的基本信息,没有进入企业的具体页面,如:苏宁物流具体页面。不过返回结果中的pid或bid应该能用于构造查询页面的URL。

最后再次强调:代码仅供学习参考,希望不要恶意爬取数据!

到此这篇关于详解用Python爬虫获取百度企业信用中企业基本信息的文章就介绍到这了,更多相关Python爬虫获取百度企业信用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python中二维阵列的变换实例
Oct 09 Python
python获取各操作系统硬件信息的方法
Jun 03 Python
python中类变量与成员变量的使用注意点总结
Apr 29 Python
Tensorflow简单验证码识别应用
May 25 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
Jan 20 Python
Python Numpy 控制台完全输出ndarray的实现
Feb 19 Python
Python 从attribute到property详解
Mar 05 Python
python下对hsv颜色空间进行量化操作
Jun 04 Python
python 自动识别并连接串口的实现
Jan 19 Python
Python读取pdf表格写入excel的方法
Jan 22 Python
Python使用tkinter制作在线翻译软件
Feb 22 Python
Python数据处理的三个实用技巧分享
Apr 01 Python
django 实现后台从富文本提取纯文本
Jul 02 #Python
详解用Python调用百度地图正/逆地理编码API
Jul 02 #Python
基于django2.2连oracle11g解决版本冲突的问题
Jul 02 #Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
Jul 02 #Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
Jul 02 #Python
使用Keras建立模型并训练等一系列操作方式
Jul 02 #Python
python解释器安装教程的方法步骤
Jul 02 #Python
You might like
PHP数据集构建JSON格式及新数组的方法
2012/11/07 PHP
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
PHP调用wsdl文件类型的接口代码分享
2014/11/19 PHP
可兼容php5与php7的cURL文件上传功能实例分析
2018/05/11 PHP
选择TreeView控件的树状数据节点的JS方法(jquery)
2010/02/06 Javascript
使用js完成节点的增删改复制等的操作
2014/01/02 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
解决jquery实现的radio重新选中的问题
2015/07/03 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
常用javascript表单验证汇总
2020/07/20 Javascript
javascript基本算法汇总
2016/03/09 Javascript
js事件处理程序跨浏览器解决方案
2016/03/27 Javascript
jquery表单验证实例仿Toast提示效果
2017/03/03 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
javascript自定义事件功能与用法实例分析
2017/11/08 Javascript
让Vue也可以使用Redux的方法
2018/05/23 Javascript
解决vue this.$forceUpdate() 处理页面刷新问题(v-for循环值刷新等)
2018/07/26 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
Vuex的初探与实战小结
2018/11/26 Javascript
详解VUE里子组件如何获取父组件动态变化的值
2018/12/26 Javascript
Vue分页器实现原理详解
2019/06/28 Javascript
如何利用JavaScript编写更好的条件语句详解
2020/08/10 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
浅谈Python实现贪心算法与活动安排问题
2017/12/19 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
2019/04/03 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
pycharm专业版远程登录服务器的详细教程
2020/09/15 Python
美国著名的女性内衣零售商:Frederick’s of Hollywood
2018/02/24 全球购物
Happy Socks英国官网:购买五颜六色的袜子
2020/11/03 全球购物
英语系毕业生自荐信
2013/10/31 职场文书
护士自我评价范文
2014/01/25 职场文书
经理岗位职责
2015/02/02 职场文书
高中班主任寄语
2019/06/21 职场文书