一、前言
以前也经常接一些Python的私单赚赚外快,但基本都是通过一些社群或者朋友介绍写一些Python代码,没想到,前阵子我竟然通过微信公众号接到了一个Python爬虫的私活!(客户兄弟人挺好的!嘿嘿!)需求是爬取全国地下水动态监测数据,有10000多条数据,数据量还可以,说爬就爬……
二、爬取目标
三、完整源码
#""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
#
# Copyright (c) 2024 愤怒的it男, All Rights Reserved.
# FileName : code.py
# Date : 2024.03.05
# Author : 愤怒的it男
# Version : 1.0.0
# Node : 欢迎关注微信公众号【愤怒的it男】
#
#""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
import csv
import requests
from datetime import datetime, timedelta
def getMonitorWellWithExtranet():
url = 'https://geocloud.cgs.gov.cn/api/geocloud/v1/open-api/call'
data = {
"apiCode":"getMonitorWellWithExtranet",
"header":{
"token":"eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJnZW9jbG91ZCIsImV4cCI6MTcxMDEwOTYxMX0.blLdPD4JTxHXUjMsRwQpU5yA-B9XMDTLNnKoJfmrZcA"
}
}
response = requests.post(url=url, json=data)
return response.json()
def getMonitorWellISiteInfoWithExtanet(id):
url = 'https://geocloud.cgs.gov.cn/api/geocloud/v1/open-api/call'
data = {
"apiCode":"getMonitorWellISiteInfoWithExtanet",
"data":{
"id":id,
"prefixTopic":""
},
"header":{
"token":"eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJnZW9jbG91ZCIsImV4cCI6MTcxMDEwOTYxMX0.blLdPD4JTxHXUjMsRwQpU5yA-B9XMDTLNnKoJfmrZcA"
}
}
response = requests.post(url=url, json=data)
print('getMonitorWellISiteInfoWithExtanet:'+ str(response.status_code))
return response.json()
def getMonitorWellLineDataWithExtranet(id):
url = 'https://geocloud.cgs.gov.cn/api/geocloud/v1/open-api/call'
data = {
"apiCode":"getMonitorWellLineDataWithExtranet",
"data":{
"id":id,
"beginTime":"2024-02-20",
"endTime":"2024-03-06",
"prefixTopic":""
},
"header":{
"token":"eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJnZW9jbG91ZCIsImV4cCI6MTcxMDEwOTYxMX0.blLdPD4JTxHXUjMsRwQpU5yA-B9XMDTLNnKoJfmrZcA"
}
}
response = requests.post(url=url, json=data)
print('getMonitorWellLineDataWithExtranet:'+ str(response.status_code))
return response.json()
def main():
monitorWellWithExtranet = getMonitorWellWithExtranet()
start_date = datetime(2024,2,20,0,0,0)
end_date = datetime(2024,3,6,0,0,0)
date_list = []
while start_date < end_date:
date_list.append(start_date.strftime('%Y-%m-%d %H:%M:%S'))
start_date += timedelta(hours=1)
with open('全国地下水动态监测数据.csv', 'a', encoding='utf-8', newline='') as file:
error_features = []
for i, feature in enumerate(monitorWellWithExtranet['features']):
data = {}
data['WELL_DBK'] = feature['properties']['WELL_DBK']
data['LONGITUDE'] = feature['geometry']['coordinates'][0]
data['LATITUDE'] = feature['geometry']['coordinates'][1]
monitorWellISiteInfoWithExtanet = getMonitorWellISiteInfoWithExtanet(data['WELL_DBK'])
if monitorWellISiteInfoWithExtanet['data'] is None:
error_features.append(feature)
print(error_features)
continue
else:
data.update(monitorWellISiteInfoWithExtanet['data'][0])
monitorWellLineDataWithExtranet = getMonitorWellLineDataWithExtranet(data['WELL_DBK'])
if monitorWellLineDataWithExtranet['data'] is None:
error_features.append(feature)
print(error_features)
continue
else:
for t in date_list:
data['sw({})'.format(t)] = ''
data['ms({})'.format(t)] = ''
for m in monitorWellLineDataWithExtranet['data']:
monitor_time = m['monitor_time'][:13]+':00:00'
data['sw({})'.format(monitor_time)] = m['sw']
data['ms({})'.format(monitor_time)] = m['ms']
print('正在采集第{}个监测点的数据……'.format(i+1))
if i==0:
fieldnames = list(data.keys())
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
writer.writerow(data)
print(error_features)
if __name__== "__main__" :
main()
四、爬取结果
WELL_DBK LONGITUDE LATITUDE SURFE_LEVATION_MSL INSTALLATION_LEVEL_DEPTH COLLAR_HEIGHT SW WELLHIERARCHYCD GROUNDWATER_TYPE LY WELLTYPECD LATITUDE_WGS84 AQUIFER_TYPECD DRILLING_DEPTH LONGITUDE_WGS84 REMARK sw(2024-02-20 00:00:00) ms(2024-02-20 00:00:00)
110101210001 116.3951234 39.90015278 0 26 45 国家级 北四河下游平原 专业监测井 39.9 孔隙水 85 116.4 北京北京市东城区文化宫
110101210002 116.40989 39.88262 0 26 45 国家级 北四河下游平原 专业监测井 39.88 孔隙水 85 116.41 北京北京市东城区天坛公园
110102210003 116.3502778 39.88416667 0 28 50 国家级 北四河下游平原 专业监测井 39.88 孔隙水 46 116.35 北京北京市西城区宣武公园
110102210004 116.3796667 39.91675092 0 26 47 国家级 北四河下游平原 专业监测井 39.92 岩溶水 97 116.38 北京北京市西城区北京图书馆
110105210001 116.4612008 39.97895403 0 30 38 国家级 北四河下游平原 专业监测井 39.98 孔隙水 50 116.46 北京北京市朝阳区水源五厂
110105210002 116.5054178 39.93684381 0 17 35 国家级 北四河下游平原 专业监测井 39.94 孔隙水 52 116.51 北京北京市朝阳区青年路汽配城
110105210003 116.5054196 39.93686111 0 40 35 国家级 北四河下游平原 专业监测井 39.94 孔隙水 108 116.51 北京北京市朝阳区青年路汽配城
110105210004 116.592535 39.90674228 0 10 27 国家级 北四河下游平原 专业监测井 39.91 孔隙水 28 116.59 北京北京市朝阳区曙光药业
110105210005 116.4780773 39.87641347 0 31 36 国家级 北四河下游平原 专业监测井 39.88 孔隙水 111 116.48 北京北京市朝阳区北京工业大学
110105210006 116.4780937 39.87639497 0 56 36 国家级 北四河下游平原 专业监测井 39.88 孔隙水 202 116.48 北京北京市朝阳区北京工业大学
110105210007 116.4904856 39.97316375 0 3 34 国家级 北四河下游平原 专业监测井 39.97 孔隙水 22 116.49 北京北京市朝阳区电子管厂
110105210008 116.5867371 39.97585175 0 27 29 国家级 北四河下游平原 专业监测井 39.98 孔隙水 55 116.59 北京北京市朝阳区楼梓庄中学
110105210009 116.5867371 39.97585175 0 37 29 国家级 北四河下游平原 专业监测井 39.98 孔隙水 115 116.59 北京北京市朝阳区楼梓庄中学
110105210010 116.5867371 39.97585175 0 56 29 国家级 北四河下游平原 专业监测井 39.98 孔隙水 158 116.59 北京北京市朝阳区楼梓庄中学
110105210011 116.5815977 39.83601183 0 12 27 国家级 北四河下游平原 专业监测井 39.84 孔隙水 26 116.58 北京北京市朝阳区大鲁店
110105210012 116.5815977 39.83601183 0 14 26 国家级 北四河下游平原 专业监测井 39.84 孔隙水 59 116.58 北京北京市朝阳区大鲁店
110105210013 116.5815977 39.83601183 0 41 27 国家级 北四河下游平原 专业监测井 39.84 孔隙水 109 116.58 北京北京市朝阳区大鲁店
110105210016 116.4904842 39.97317819 0 23 34 国家级 北四河下游平原 专业监测井 39.97 孔隙水 48 116.49 北京北京市朝阳区电子管厂
110105210017 116.4904811 39.97320089 0 34 34 国家级 北四河下游平原 专业监测井 39.97 孔隙水 103 116.49 北京北京市朝阳区电子管厂
110105210018 116.4904783 39.97323108 0 47 34 国家级 北四河下游平原 专业监测井 39.97 孔隙水 179 116.49 北京北京市朝阳区电子管厂
110105210020 116.5148236 40.01794433 0 48 35 国家级 北四河下游平原 专业监测井 40.02 孔隙水 77 116.51 北京北京市朝阳区北皋
110105210021 116.3979403 40.01914386 0 34 40 国家级 北四河下游平原 专业监测井 40.02 孔隙水 100 116.4 北京北京市朝阳区仰山管理所
110105210022 116.5148236 40.01794433 0 54 35 国家级 北四河下游平原 专业监测井 40.02 孔隙水 192 116.51 北京北京市朝阳区北皋
110105210023 116.4049698 39.97532389 0 15 45 国家级 北四河下游平原 专业监测井 39.98 孔隙水 47 116.4 北京北京市朝阳区安外小关
110105210024 116.3979053 40.01913786 0 16 40 国家级 北四河下游平原 专业监测井 40.02 孔隙水 50 116.4 北京北京市朝阳区仰山管理所
110105210025 116.4049996 39.97532356 0 32 45 国家级 北四河下游平原 专业监测井 39.98 孔隙水 128 116.4 北京北京市朝阳区安外小关
110106210001 116.3169071 39.87359444 0 24 45 国家级 北四河下游平原 专业监测井 39.87 孔隙水 39 116.32 北京北京市丰台区水源四厂
110106210002 116.3476423 39.82148083 0 27 44 国家级 北四河下游平原 专业监测井 39.82 孔隙水 74 116.35 北京北京市丰台区丰台潘家庙
110106210003 116.4191732 39.82463333 0 25 37 国家级 北四河下游平原 专业监测井 39.82 孔隙水 85 116.42 北京北京市丰台区大红门
110106210004 116.347561 39.82143378 0 27 44 国家级 北四河下游平原 专业监测井 39.82 孔隙水 52 116.35 北京北京市丰台区丰台潘家庙
110106210005 116.1288961 39.87088939 0 54 105 国家级 大清河山区 专业监测井 39.87 岩溶水 190 116.13 北京北京市丰台区长辛店镇梨园村
110106210006 116.3552455 39.82048378 0 25 42 国家级 北四河下游平原 专业监测井 39.82 孔隙水 67 116.36 北京北京市丰台区南苑乡槐新郊野公园
110107210001 116.1845709 39.94035186 0 5 68 国家级 北四河下游平原 专业监测井 39.94 孔隙水 60 116.18 北京北京市石景山区实兴桥西北
110107210002 116.1618954 39.89029347 0 31 76 国家级 永定河册田水库至三家店区间 专业监测井 39.89 孔隙水 43 116.16 北京北京市石景山区莲石湖东岸
110107210003 116.2006961 39.93872025 0 39 65 国家级 北四河下游平原 专业监测井 39.94 孔隙水 100 116.2 北京北京市石景山区西黄村砂石坑
110108210001 116.3007683 39.92986667 0 32 55 国家级 北四河下游平原 专业监测井 39.93 孔隙水 50 116.3 北京北京市海淀区首师大
110108210002 116.2385219 39.98683389 0 31 54 国家级 北三河山区 专业监测井 39.99 岩溶水 201 116.24 北京北京市海淀区玉泉山
110108210003 116.2166314 40.08481575 0 28 44 国家级 北四河下游平原 专业监测井 40.08 孔隙水 104 116.22 北京北京市海淀区大牛坊
110108210004 116.3082794 39.99830739 0 10 45 国家级 北四河下游平原 专业监测井 40 孔隙水 21 116.31 北京北京市海淀区清华大学
110108210005 116.2996481 39.99507111 0 24 45 国家级 北四河下游平原 专业监测井 40 孔隙水 71 116.3 北京北京市海淀区北京大学
110108210006 116.2165925 40.08481469 0 16 44 国家级 北四河下游平原 专业监测井 40.08 孔隙水 55 116.22 北京北京市海淀区大牛坊
110108210007 116.2166314 40.08481575 0 39 44 国家级 北四河下游平原 专业监测井 40.08 孔隙水 169 116.22 北京北京市海淀区大牛坊
110108210008 116.2632168 40.06608886 0 21 45 国家级 北四河下游平原 专业监测井 40.07 孔隙水 50 116.26 北京北京市海淀区永丰屯土井村村西
110108210009 116.2632168 40.06608886 0 27 45 国家级 北四河下游平原 专业监测井 40.07 孔隙水 100 116.26 北京北京市海淀区永丰屯土井村村西
110108210010 116.2632168 40.06608886 0 32 45 国家级 北四河下游平原 专业监测井 40.07 孔隙水 180 116.26 北京北京市海淀区永丰屯土井村村西
110108210011 116.1241563 40.05708783 0 41 61 国家级 北三河山区 专业监测井 40.06 孔隙水 50 116.12 北京北京市海淀区北安河北
110108210012 116.1241563 40.05708783 0 41 61 国家级 北三河山区 专业监测井 40.06 孔隙水 100 116.12 北京北京市海淀区北安河北
110108210013 116.135448 40.11253008 0 28 49 国家级 北三河山区 专业监测井 40.11 孔隙水 50 116.14 北京北京市海淀区聂各庄乡前沙涧村
110108210014 116.135448 40.11253008 0 30 49 国家级 北三河山区 专业监测井 40.11 孔隙水 100 116.14 北京北京市海淀区聂各庄乡前沙涧村
五、免责声明
本文所涉及源代码均为个人学习所编写,并于公众号(愤怒的it男)中原创发布,仅可用于计算机技术学习及研究等合法行为,禁止利用本文所涉及源代码从事任何违反本国(地区)法律法规的业务,如有发现存在违法违规行为我会举报到网监部门。
原文始发于微信公众号(愤怒的it男):没想到这样也能接Python爬虫的私活!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/269357.html