利用百度地图API进行POI爬虫

本篇博客内容主要引自:https://zhuanlan.zhihu.com/p/73712621,对该作者表示感谢。

需求:爬取某几个省的茶园POI数据

百度地图API爬虫注意事项:

1、通过行政区划进行数据爬虫,需要用市一级的行政规划,省级行政规划只能取到粗略值。

2、申请AK,需要进行开发者认证,否则会有下载并发限制。

3、可以把爬取结果存入excel,也可以放入mysql,我在存入mysql时,报1366的错误,这是因为在向数据库插入中文编码有错,需要更改表的字符编码,方法如下:

1)首先更改表的字符集编码

ALTER TABLE `tablename` DEFAULT CHARACTER SET utf8;

2)然后需要修改每个varchar字段的字符集编码

alter table tablename change column column varchar(xxx) character set utf8;  

方法:

1、首先根据关键字和省份数据生成待爬取的城市列表信息,并存入TXT中。

# coding=utf-8
import requests
import json

'''
获取所有拥有茶园的城市,并把数据存储到txt文本中
'''

def get_json(region):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16'
    }


    params = {
        'query': '茶园',                #检索关键字
        'region': region,               #检索行政区划区域
        'output': 'json',               #输出格式为json
        'scope': '2',                   #检索结果详细程度。取值为1 或空,则返回基本信息;取值为2,返回检索POI详细信息
        'page_size': 20,                #单次召回POI数量,默认为10条记录,最大返回20条。
        'page_num': 0,                  #分页页码,默认为0,0代表第一页,1代表第二页,以此类推。
        'ak': ak                        # 需要自己申请ak http://lbsyun.baidu.com/apiconsole/key?application=key#/home
    }


    res = requests.get("http://api.map.baidu.com/place/v2/search", params=params, headers=headers)
    content = res.text
    decodejson = json.loads(content)  #将已编码的 JSON 字符串解码为 Python 对象,就是python解码json对象
    print(decodejson)
    return decodejson

# 需要爬取的省份
province_list = ['江苏省', '浙江省', '广东省', '福建省', '山东省', '河南省',  '四川省',  '云南省',
                 '湖南省', '湖北省', '江西省', '安徽省',  '广西壮族自治区', '陕西省',
                 '贵州省',  '甘肃省', '海南省', '西藏自治区','台湾']

# 将爬取的城市列表写入txt
for eachprovince in province_list:
    decodejson = get_json(eachprovince)
    for eachcity in decodejson['results']:
        city = eachcity['name']
        num = eachcity['num']
        content = '\t'.join([city,str(num)])+'\r\n'
        with open('citys_chayuan_num.txt','a+',encoding='utf-8') as f:
            f.write(content)
            f.close()

2、遍历TXT城市列表,对每个城市根据关键字进行数据爬取,并将爬取的所有信息存入mysql数据库中。

# 创建数据表
CREATE TABLE city (
         id INT NOT NULL AUTO_INCREMENT,
         city VARCHAR(200) NOT NULL,
         chayuan VARCHAR(200) NOT NULL,
         location_lat FLOAT,
         location_lng FLOAT,
         address VARCHAR(200),
         street_id VARCHAR(200),
         uid VARCHAR(200),
         created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
         PRIMARY KEY (id)
         );
# coding=utf-8
import requests
import json
import MySQLdb


import io
import sys
from urllib.request import urlopen
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')
'''
获取城市列表中每个茶园数据
'''
conn = MySQLdb.connect(host='localhost',user='root',password='yourpassword',port=3306,db='db',charset="gbk")
cur=conn.cursor()
def get_json(region,page_num):
    # print(region)
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16'
    }

    params = {
        'query': '茶园',                #检索关键字
        'region': region,               #检索行政区划区域
        'output': 'json',               #输出格式为json
        'scope': '2',                   #检索结果详细程度。取值为1 或空,则返回基本信息;取值为2,返回检索POI详细信息
        'coord_type' : '1',             #1表示WGS84坐标
        'page_size': 20,                #单次召回POI数量,默认为10条记录,最大返回20条。
        'page_num': page_num,                  #分页页码,默认为0,0代表第一页,1代表第二页,以此类推。
        'ak': 'ak'
    }

    res = requests.get("http://api.map.baidu.com/place/v2/search", params=params, headers=headers)
    content = res.text
    decodejson = json.loads(content)  #将已编码的 JSON 字符串解码为 Python 对象,就是python解码json对象
    return decodejson

city_list=[]
with open('citys_chayuan_num.txt','r',encoding='utf8') as f:
    # print(f.read())
    for eachLine in f:
        if eachLine !="" and eachLine !="\n":
            fields = eachLine.split("\t")
            city=fields[0]
            city_list.append(city)
print(city_list)


for eachcity in city_list:
    not_last_page = True
    page_num = 0
    while not_last_page:
        decodejson = get_json(eachcity,page_num)
        if decodejson['results']:
            for eachone in decodejson['results']:
                try:
                    chayuan = eachone['name']
                except:
                    chayuan = None
                try:
                    location_lat = eachone['location']['lat']
                except:
                    location_lat = None
                try:
                    location_lng = eachone['location']['lng']
                except:
                    location_lng = None
                try:
                    address = eachone['address']
                except:
                    address = None
                try:
                    street_id = eachone['street_id']
                except:
                    street_id = None
                try:
                    uid = eachone['uid']
                except:
                    uid = None

                sql = """INSERT INTO swtgeo.chachang
                                (city, chayuan, location_lat, location_lng, address, street_id, uid)
                                VALUES
                                (%s, %s, %s, %s, %s, %s, %s);"""

                cur.execute(sql,(eachcity, chayuan, location_lat, location_lng, address, street_id, uid,))
                conn.commit()
            page_num += 1
        else:
            not_last_page = False
cur.close()
conn.close()

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值