本文主要是介绍python 爬取全国农产品批发指数网站 charles 抓取 flash 数据包 分析数据包数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
python 爬取全国农产品批发指数网站
charles 抓取 flash 数据包 分析数据包数据
amf 数据请求与返回格式 flash 数据
#!/usr/bin/env python
# -*- coding: utf-8 -*-import requests
import uuid
import pyamf
import datetime
from pyamf import remoting
from pyamf.flex import messaging
import pandas as pd# charles 抓取 flash 数据包 分析数据包数据
class HqPara:def __init__(self):self.marketInfo = Noneself.breedInfoDl = Noneself.breedInfo = Noneself.province = None# 注册自定义的Body参数类型,这样数据类型com.itown.kas.pfsc.report.po.HqPara就会在后面被一并发给服务端
# 否则服务端就可能返回参数不是预期的异常Client.Message.Deserialize.InvalidType
pyamf.register_class(HqPara, alias='com.itown.kas.pfsc.report.po.HqPara')# 构造flex.messaging.messages.RemotingMessage消息
msg = messaging.RemotingMessage(messageId=str(uuid.uuid1()).upper(),clientId=str(uuid.uuid1()).upper(),operation='getHqSearchData',destination='reportStatService',timeToLive=0,timestamp=0)# https://blog.csdn.net/imiser2016/article/details/79231783 推荐参考博客
# 第一个是查询参数 第二个是页数 第三个是控制每页显示的数量(默认每页只显示15条)但爬取的时候可以一下子设置成全部的数量 构造请求数据
def get_request_data(page_num, total):msg.body = [HqPara(), str(page_num), str(total)]msg.headers['DSEndpoint'] = Nonemsg.headers['DSId'] = str(uuid.uuid1()).upper()# 按AMF协议编码数据req = remoting.Request('null', body=(msg,))env = remoting.Envelope(amfVersion=pyamf.AMF3)env.bodies = [('/1', req)]data = bytes(remoting.encode(env).read())return data# 返回一个请求的数据格式
def get_response(data):url = 'http://jgsb.agri.cn/messagebroker/amf'res = requests.post(url, data, headers={'Content-Type': 'application/x-amf'})return res.contentdef get_content(response):amf_parse_info = remoting.decode(response)# 数据总条数total = amf_parse_info.bodies[0][1].body.body[3]info = amf_parse_info.bodies[0][1].body.body[0]return total, infodef store2df(info):df = pd.DataFrame(info)df.to_csv(datetime.datetime.now().strftime('%Y-%m-%d') + '全国农产品指数的抓取.csv', index=0, encoding='utf-8')def job():total_num, info = get_content(get_response(get_request_data(1, 15)))num, data = get_content(get_response(get_request_data(1, total_num)))store2df(data)if __name__ == '__main__':job()
完整代码下载:https://github.com/tanjunchen/SpiderProject/tree/master/agriculture
这篇关于python 爬取全国农产品批发指数网站 charles 抓取 flash 数据包 分析数据包数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!