其他
案例实战 | 企业信息数据采集
企业信息-爱企查
想搜集企业信息,可以使用爱企查网站,例如通过该网站,搜”华为“,,可以获得与关键词华为相关的很多企业名信息
设计网络爬虫步骤
使用开发者工具network面板审查网站的网址规律urls 对单个网址url尝试访问 确定网站是html或json类型 从网页中解析定位需要的数据。
使用pyquery解析html页面数据; 或使用json解析json页面数据
如果对python网络爬虫不了解,想入门系统学习,可以考虑入门我的视频专栏课
尝试访问第一页
经过开发者工具network,可以使用requests对其进行访问。
需要注意的是,headers中需要加入Referer参数,该参数作用是告诉服务器
兄弟,我是经过Referer介绍的,不然我也不可能知道数据存放在
https://aiqicha.baidu.com/s/advanceFilterAjax?q=%E5%8D%8E%E4%B8%BA&t=&p=1&s=10&o=0&f=%7B%7D
这个网址啊
so,Referer就是网站验证我是友军还是敌军的暗号。
import requests
from urllib.parse import quote
query = '华为'
url = 'https://aiqicha.baidu.com/s/advanceFilterAjax?q={q}&t=&p=1&s=10&o=0&f=%7B%7D'.format(q=quote(query))
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36',
'Referer': 'https://aiqicha.baidu.com/s?q={q}&t=0'.format(q=quote(query))}
resp = requests.get(url, headers=headers)
resp
<Response [200]>
解析网页数据
通过开发者工具可以看到,这个网站采用的json类型网页数据。
好在这类网页的解析定位比较简单。
for com in resp.json()['data']['resultList'][:3]:
print(com)
print()
{'pid': '31360200662522', 'entName': '<em>华为</em>技术有限公司', 'entType': '有限责任公司(自然人投资或控股的法人独资)', 'validityFrom': '1896-08-14', 'domicile': '深圳市龙岗区坂田<em>华为</em>总部办公楼', 'entLogo': 'https://zhengxin-pub.cdn.bcebos.com/logopic/67e739bf0e47768f4a1f542daf3f7f42_fullsize.jpg', 'openStatus': '开业', 'legalPerson': '赵明路', 'tags': {'laTaxer': '<span class="zx-ent-tag laTaxer">A级纳税人(2020)</span>'}, 'logoWord': '华为技术', 'titleName': '华为技术有限公司', 'titleLegal': '赵明路', 'titleDomicile': '深圳市龙岗区坂田华为总部办公楼', 'levelAtaxer': [2020, 2018, 2019, 2016, 2017, 2014, 2015], 'regCap': '5,035,113.2万', 'scope': '一般经营项目是:程控交换机、传输设备、数据通信设备、宽带多媒体设备、电源、无线通信设备、微电子产品、软件、系统集成工程、计算机及配套设备、终端设备及相关通信信息产品、数据中心机房基础设施及配套产品(含供配电、空调制冷设备、智能管理监控等)的开发、生产、销售、技术服务、工程安装、维修、咨询、代理、租赁;信息系统设计、集成、运行维护;集成电路设计、研发;统一通信及协作类产品,服务器及配套软硬件产品,存储设备及相关软件的研发、生产、销售;无线数据产品(不含限制项目)的研发、生产、销售;通信站点机房基础设施及通信配套设备(含通信站点、通信机房、通信电源、机柜、天线、通信线缆、配电、智能管理监控、锂电及储能系统等)的研发、生产、销售;能源科学技术研究及能源相关产品的研发、生产、销售;大数据产品、物联网及通信相关领域产品的研发、生产、销售;汽车零部件及智能系统的研发、生产、销售及服务;建筑工程;设计、制作、发布、代理各类广告;通信设备租赁(不含限制项目);培训服务;技术认证服务;信息咨询(不含限制项目);企业管理咨询(不含限制项目);进出口业务;国内商业、物资供销业业务(不含专营、专控、专卖商品);对外经济技术合作业务;房屋租赁业务(持许可经营证);以及其他法律法规不禁止的经营活动(依法须经批准的项目,经相关部门批准后方可开展经营活动)。,许可经营项目是:增值电信业务经营。', 'regNo': '815503001822039217', 'hitReason': [{'品牌项目': '<em>华为</em>'}, {'商标名称': '<em>华为</em>'}, {'企业名称': '<em>华为</em>技术有限公司'}, {'网站名称': '<em>华为</em>应用平台1'}, {'地址': '深圳市龙岗区坂田<em>华为</em>总部办公楼'}], 'labels': {'opening': {'text': '开业', 'style': 'blue', 'fontColor': '#1EA930', 'bgColor': '#EBF6EC'}}, 'personTitle': '法定代表人', 'personId': 'a9f275934f59110096757b656ba41382'}
{'pid': '28610144220343', 'entName': '<em>华为</em>终端(深圳)有限公司', 'entType': '有限责任公司(外商投资、非独资)', 'validityFrom': '2003-12-25', 'domicile': '深圳市龙岗区坂田<em>华为</em>基地B区2号楼', 'entLogo': 'https://zhengxin-pub.cdn.bcebos.com/logopic/a638462a7a48ab79f84b7db2c0e64230_fullsize.jpg', 'openStatus': '开业', 'legalPerson': '赵明路', 'tags': {'laTaxer': '<span class="zx-ent-tag laTaxer">A级纳税人(2020)</span>'}, 'logoWord': '华为终端', 'titleName': '华为终端(深圳)有限公司', 'titleLegal': '赵明路', 'titleDomicile': '深圳市龙岗区坂田华为基地B区2号楼', 'levelAtaxer': [2020, 2018, 2019, 2016, 2017, 2014, 2015], 'regCap': '1,598,080.8万', 'scope': '一般经营项目是:开发、生产、销售通信电子产品及配套产品,并提供技术咨询和售后服务。进出口业务(不含分销)。,许可经营项目是:', 'regNo': '815503006447640305', 'hitReason': [{'企业名称': '<em>华为</em>终端(深圳)有限公司'}, {'网站名称': '<em>华为</em>HARMONYOS网站'}, {'地址': '深圳市龙岗区坂田<em>华为</em>基地B区2号楼'}], 'labels': {'opening': {'text': '开业', 'style': 'blue', 'fontColor': '#1EA930', 'bgColor': '#EBF6EC'}}, 'personTitle': '法定代表人', 'personId': 'a9f275934f59110096757b656ba41382'}
{'pid': '30140456955334', 'entName': '<em>华为</em>终端有限公司', 'entType': '有限责任公司(外商投资企业法人独资)', 'validityFrom': '2012-11-23', 'domicile': '广东省东莞市松山湖园区新城路2号', 'entLogo': 'https://zhengxin-pub.cdn.bcebos.com/logopic/cc662a5d573b793e9c5b84031350ced0_fullsize.jpg', 'openStatus': '开业', 'legalPerson': '赵明路', 'tags': {'laTaxer': '<span class="zx-ent-tag laTaxer">A级纳税人(2020)</span>'}, 'logoWord': '华为终端', 'titleName': '华为终端有限公司', 'titleLegal': '赵明路', 'titleDomicile': '广东省东莞市松山湖园区新城路2号', 'levelAtaxer': [2020, 2018, 2019, 2016, 2017, 2014, 2015], 'regCap': '70,000.0万', 'scope': '开发、生产、销售:通信及电子产品、计算机、卫星电视接收天线、高频头、数字卫星电视接收机及前述产品的配套产品,并提供技术咨询和售后服务;开发、生产、销售:医疗器械(第一类、第二类、第三类医疗器械),并提供技术咨询和售后服务;增值电信业务经营;佣金代理;货物或技术进出口(国家禁止或涉及行政审批的货物和技术进出口除外)。(依法须经批准的项目,经相关部门批准后方可开展经营活动)', 'regNo': '815518000494355853', 'hitReason': [{'企业名称': '<em>华为</em>终端有限公司'}], 'labels': {'opening': {'text': '开业', 'style': 'blue', 'fontColor': '#1EA930', 'bgColor': '#EBF6EC'}}, 'personTitle': '法定代表人', 'personId': 'a9f275934f59110096757b656ba41382'}
完整爬虫
经过刚刚的几个步骤,我们现在只需要
import csv
import requests
import time
query = '华为'
max_pages = 10 #获取前10页的企业信息数据
#存储数据
csvf = open('企业信息.csv', 'a+', encoding='utf-8', newline='')
fieldnames = ['titleName', 'titleDomicile', 'titleLegal', 'validityFrom', 'regCap', 'regNo', 'scope']
writer = csv.DictWriter(csvf, fieldnames=fieldnames)
writer.writeheader()
#访问
for page in range(1, max_pages):
url = 'https://aiqicha.baidu.com/s/advanceFilterAjax?q={q}&t=&p={p}&s=10&o=0&f=%7B%7D'.format(q=quote(query), p=page)
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36',
'Referer': 'https://aiqicha.baidu.com/s?q={q}&t=0'.format(q=quote(query))}
resp = requests.get(url, headers=headers)
#解析数据
for com in resp.json()['data']['resultList']:
data = dict()
for fieldname in fieldnames:
data[fieldname] = com[fieldname]
#写入csv
writer.writerow(data)
csvf.close()
运行结果
采集10页的爬虫运行结束后,尝试读取 企业信息.csv
import pandas as pd
df= pd.read_csv('企业信息.csv')
df.head()
近期文章
如何在DataFrame中使用If-Else条件语句创建新列