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

一、前言

以前也经常接一些Python的私单赚赚外快,但基本都是通过一些社群或者朋友介绍写一些Python代码,没想到,前阵子我竟然通过微信公众号接到了一个Python爬虫的私活!(客户兄弟人挺好的!嘿嘿!)需求是爬取全国地下水动态监测数据,有10000多条数据,数据量还可以,说爬就爬……

二、爬取目标

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

三、完整源码

#""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
#
# 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爬虫的私活!

五、免责声明

本文所涉及源代码均为个人学习所编写,并于公众号(愤怒的it男)中原创发布,仅可用于计算机技术学习及研究等合法行为,禁止利用本文所涉及源代码从事任何违反本国(地区)法律法规的业务,如有发现存在违法违规行为我会举报到网监部门。

原文始发于微信公众号(愤怒的it男):没想到这样也能接Python爬虫的私活!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/269357.html

(0)
Java朝阳的头像Java朝阳

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!