详解用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实现linux服务器批量修改密码并生成execl
Apr 22 Python
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
May 27 Python
python处理csv数据动态显示曲线实例代码
Jan 23 Python
PyQt5每天必学之单行文本框
Apr 19 Python
Django后台获取前端post上传的文件方法
May 28 Python
python K近邻算法的kd树实现
Sep 06 Python
python pandas读取csv后,获取列标签的方法
Nov 12 Python
在python中实现对list求和及求积
Nov 14 Python
Python并发:多线程与多进程的详解
Jan 24 Python
python如何基于redis实现ip代理池
Jan 17 Python
matplotlib之多边形选区(PolygonSelector)的使用
Feb 24 Python
Python如何用re模块实现简易tokenizer
May 02 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投票系统防刷票判断流程分析
2012/02/04 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
php封装的mongodb操作类代码
2017/08/06 PHP
PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
2018/05/11 PHP
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
jQuery实现多级联动下拉列表查询框
2016/01/18 Javascript
javascript中this指向详解
2016/04/23 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
浅谈JavaScript for循环 闭包
2016/06/22 Javascript
微信小程序通过api接口将json数据展现到小程序示例
2017/01/20 Javascript
原生JS改变透明度实现轮播效果
2017/03/24 Javascript
bootstrap 设置checkbox部分选中效果
2017/04/20 Javascript
JS实现的类似微信聊天效果示例
2019/01/29 Javascript
详解在HTTPS 项目中使用百度地图 API
2019/04/26 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
2019/08/12 Javascript
typescript配置alias的详细步骤
2020/08/12 Javascript
javascript实现点击按钮切换轮播图功能
2020/09/23 Javascript
微信小程序实现锚点跳转
2020/11/23 Javascript
CentOS 8.2服务器上安装最新版Node.js的方法
2020/12/16 Javascript
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
pyqt5 QlistView列表显示的实现示例
2020/03/24 Python
Python下使用Trackbar实现绘图板
2020/10/27 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
Clearly新西兰:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
navabi英国:设计师大码女装
2019/06/25 全球购物
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
质量月活动总结
2014/08/26 职场文书
2014年保育员个人工作总结
2014/12/02 职场文书
幼儿园六一主持词
2015/06/30 职场文书
小学开学典礼新闻稿
2015/07/17 职场文书
2015年秋季运动会加油稿
2015/07/22 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
网络安全倡议书(3篇)
2019/09/18 职场文书
vue cli4中mockjs在dev环境和build环境的配置详情
2022/04/06 Vue.js