时间区间数据爬取之Payload

目标网站及需求

网站:安徽省公共资源交易监管网
需求:爬取安徽省各地市近N年每月交易统计数据。

数据接口解析

数据接口

随便查询
点击查询按钮,观察Network返回资源,点开预览,发现想要的数据
在这里插入图片描述
从headers中可以确定url为:
http://ggzy.ah.gov.cn/jyxx/tongji/allProjectCountAndAmountProportion
在这里插入图片描述

选择参数传递

在查询时一些条件供我们选择,其中包括时间区间及查询范围即层级(市县),观察Payload发现表单数据中有选择参数的传递,包括起始时间、结束时间级层级。
在这里插入图片描述

爬取代码

导入工具库

import requests 
import json 
import pandas as pd
import calendar 
import itertools

爬取代码

#url
url_sxdata = 'http://ggzy.ah.gov.cn/jyxx/tongji/allProjectCountAndAmountProportion'
#请求头,此处复制原网页的headers,可自己另行设置。
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding':'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Length': '80',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Cookie': 'td_cookie=4264047000; X-LB=1.1.1a.f7579fcd; Hm_lvt_e2329777c4106c325d471eec6259333f=1649916212,1650267626; Hm_lpvt_e2329777c4106c325d471eec6259333f=1650275552; JSESSIONID=B2AC162AE978906897B536108764C0BB',
'Host': 'ggzy.ah.gov.cn',
'Origin': 'http://ggzy.ah.gov.cn',
'Referer': 'http://ggzy.ah.gov.cn/jyxx/tongji/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}

#主体代码
#设置年份及月份范围
years = [2022]
months = [1,2,3]
#设置容器,此处因爬取后需分析处理,用的pandas工具。可自行设置文件读取
#sx_data = pd.DataFrame(columns=['count', 'amount', 'regionCode', 'regionName','month','year'])
sx_data = pd.DataFrame()
for ym in itertools.product(years,months):
    #取出每月最后一天
    lastDay = calendar.monthrange(ym[0],ym[1])[1]
    #拼接起止时间
    month_ = '0'+str(ym[1]) if ym[1]<10 else str(ym[1])
    startTime = str(ym[0])+'-'+month_+'-'+'01'
    endTime = str(ym[0])+'-'+month_+'-'+str(lastDay)
    #print(startTime,endTime)
    #设置参数,其他参数可自行观察,不一一详述
    params = {'startTime':startTime,'endTime':endTime,'level':2,'projectType':'','projectWay':'','source':2}
    #请求数据并解析json
    sxdata = pd.DataFrame(json.loads(requests.post(url_sxdata,headers=headers,data=params).text))
    sxdata['month'] = ym[1]
    sxdata['year'] = ym[0]
    sx_data = pd.concat([sx_data,sxdata])
#请求各项目类型交易数及成交额代码
snumdata = pd.DataFrame(json.loads(requests.post(url_snumdata,headers=headers,data=params).text)['shuju'])
snumdata['month'] = ym[1]
snumdata['year'] = ym[0]
smoneydata = pd.DataFrame(json.loads(requests.post(url_smoneydata,headers=headers,data=params).text)['shuju'])
mergedata = pd.merge(snumdata,smoneydata,how='left',on='name')
snum_data = pd.concat([snum_data,mergedata])
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值