没想到这样也能接Python爬虫的私活!

一、前言

以前也经常接一些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 北京北京市海淀区聂各庄乡前沙涧村  

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值