详解用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 相关文章推荐
使用IronPython把Python脚本集成到.NET程序中的教程
Mar 31 Python
Python下的twisted框架入门指引
Apr 15 Python
python实现连接mongodb的方法
May 08 Python
Python编程入门的一些基本知识
May 13 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
Jun 21 Python
Python实现Linux中的du命令
Jun 12 Python
利用Python在一个文件的头部插入数据的实例
May 02 Python
python3结合openpyxl库实现excel操作的实例代码
Sep 11 Python
Django中使用session保持用户登陆连接的例子
Aug 06 Python
pycharm 对代码做静态检查操作
Jun 09 Python
python ansible自动化运维工具执行流程
Jun 24 Python
python实现简单石头剪刀布游戏
Oct 24 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中使用session_set_save_handler()函数把session保存到MySQL数据库实例
2014/11/06 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
2020/04/06 PHP
Javascript实现的分页函数
2007/02/07 Javascript
php对mongodb的扩展(初识如故)
2012/11/11 Javascript
JQuery日期插件datepicker的使用方法
2016/03/03 Javascript
详解JavaScript异步编程中jQuery的promise对象的作用
2016/05/03 Javascript
javascript简单实现跟随滚动条漂浮的返回顶部按钮效果
2016/08/19 Javascript
让DIV的滚动条自动滚动到最底部的3种方法(推荐)
2016/09/24 Javascript
基于jQuery的checkbox全选问题分析
2016/11/18 Javascript
Bootstarp基本模版学习教程
2017/02/01 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
React styled-components设置组件属性的方法
2018/08/07 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
在vue中使用G2图表的示例代码
2019/03/19 Javascript
JS异步错误捕获的一些事小结
2019/04/26 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
Vue组件跨层级获取组件操作
2020/07/27 Javascript
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
2020/08/10 Javascript
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
python实现查询苹果手机维修进度
2015/03/16 Python
使用Python实现一个简单的项目监控
2015/03/31 Python
使用Python编写爬虫的基本模块及框架使用指南
2016/01/20 Python
Python模块结构与布局操作方法实例分析
2017/07/24 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
Flask框架模板渲染操作简单示例
2019/07/31 Python
浅析python中while循环和for循环
2019/11/19 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
2021/02/26 Python
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
自我鉴定注意事项
2014/01/19 职场文书
机械设计毕业生自荐信
2014/02/02 职场文书
新年团拜会主持词
2014/04/02 职场文书
化学专业自荐信
2014/05/28 职场文书
对PyTorch中inplace字段的全面理解
2021/05/22 Python
Python matplotlib绘制条形统计图 处理多个实验多组观测值
2022/04/21 Python