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

作者:wild_orange 时间:2022-07-27 18:49:52 

一、背景

希望根据企业名称查询其经纬度,所在的省份、城市等信息。直接将企业名称传给百度地图提供的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。

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

来源:https://blog.csdn.net/qq_35408030/article/details/107068115

标签:Python,爬虫,获取,百度企业信用
0
投稿

猜你喜欢

  • Python使用smtplib 实现单发和群发邮件验证码

    2023-07-10 13:56:50
  • 记一次pyinstaller打包pygame项目为exe的过程(带图片)

    2023-12-29 12:45:19
  • Python自定义主从分布式架构实例分析

    2022-09-24 01:28:29
  • Python绘制loss曲线和准确率曲线实例代码

    2021-05-21 07:15:13
  • Python实现http接口自动化测试的示例代码

    2023-05-01 07:14:45
  • Python中时间datetime的处理与转换用法总结

    2022-05-03 01:23:01
  • python manage.py runserver流程解析

    2022-03-11 13:12:10
  • pycharm实现猜数游戏

    2023-01-14 19:04:49
  • 解决Python报错:SyntaxError: invalid character ‘,‘ (U+FF0C)

    2023-01-24 06:12:57
  • 封装html的select标签的js操作实例

    2024-05-09 10:34:07
  • python实现简单井字棋游戏

    2023-08-08 21:38:01
  • 关于Dreamweaver乱码问题的解决方案

    2010-09-02 12:36:00
  • 如何基于matlab相机标定导出xml文件

    2023-01-29 17:52:59
  • Python 队列Queue和PriorityQueue解析

    2023-07-15 20:31:11
  • 黑客谈 MSSQL SA权限入侵的感悟

    2008-03-20 10:18:00
  • Pandas读取csv时如何设置列名

    2023-11-25 19:54:55
  • python实现图片插入文字

    2021-11-02 20:32:09
  • Django使用redis缓存服务器的实现代码示例

    2022-12-15 09:16:28
  • 基于Python实现本地音乐播放器的制作

    2022-05-11 16:37:46
  • 如何在页面中对不同的数据进行相同的处理?

    2010-06-26 12:30:00
  • asp之家 网络编程 m.aspxhome.com