详解用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执行子进程实现进程间通信的方法
Jun 02 Python
Python文件右键找不到IDLE打开项解决办法
Jun 08 Python
Python验证码识别处理实例
Dec 28 Python
python找出完数的方法
Nov 12 Python
Python 从相对路径下import的方法
Dec 04 Python
python实现多层感知器
Jan 18 Python
Python在cmd上打印彩色文字实现过程详解
Aug 07 Python
TensorFlow自定义损失函数来预测商品销售量
Feb 05 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
May 26 Python
python3.x中安装web.py步骤方法
Jun 23 Python
PyCharm2019 安装和配置教程详解附激活码
Jul 31 Python
python爬虫爬取网页数据并解析数据
Sep 18 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
多文件上载系统完整版
2006/10/09 PHP
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
防止用户利用PHP代码DOS造成用光网络带宽
2011/03/01 PHP
PHP操作mysql函数详解,mysql和php交互函数
2011/05/19 PHP
通过PHP修改Linux或Unix口令的方法分享
2012/01/30 PHP
PHP代码保护--Zend Guard的使用详解
2013/06/03 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
2017/04/26 PHP
Mac下php 5升级到php 7的步骤详解
2017/04/26 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
各情景下元素宽高的获取实现代码
2011/09/13 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
解析jQuery的三种bind/One/Live事件绑定使用方法
2013/12/30 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
jQuery的层级查找方式分析
2016/06/16 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
requirejs按需加载angularjs文件实例
2017/06/08 Javascript
JS中Swiper的使用和轮播图效果
2017/08/11 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
2019/03/04 Javascript
用js简单提供增删改查接口
2019/05/12 Javascript
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
学习python (2)
2006/10/31 Python
Python实现大文件排序的方法
2015/07/10 Python
Python实现解析Bit Torrent种子文件内容的方法
2017/08/29 Python
Python socket实现多对多全双工通信的方法
2019/02/13 Python
通过python3实现投票功能代码实例
2019/09/26 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
2020/04/10 Python
python 实现仿微信聊天时间格式化显示的代码
2020/04/17 Python
CSS中垂直居中的简单实现方法
2015/07/06 HTML / CSS
浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同
2020/06/04 HTML / CSS
网络技术专业求职信
2014/07/13 职场文书
社会发展项目建议书
2014/08/25 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
利用JuiceFS使MySQL 备份验证性能提升 10 倍
2022/03/17 MySQL
GPU服务器的多用户配置方法
2022/07/07 Servers