'''
Created on 2019年12月23日
@author: Zhangzhiwei
'''
import datetime
import threading
import cx_Oracle
import urllib.request
import uuid
import pyamf
from pyamf import remoting
from pyamf.flex import messaging
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
class HqPara:
def __init__(self, breedInfo, provice, breedInfoDl, marketInfo):
self.marketInfo = marketInfo
self.breedInfoDl = breedInfoDl
self.breedInfo = breedInfo
self.provice = provice
class BreedInfoPo():
def __init__(self, children0, item_code, item_name, children1):
self.parentcode = None
self._children = children0
self.itemcode = item_code # String 000000
self.itemname = item_name # String 全部
self.children = children1
class ProvincePo():
def __init__(self, item_code, item_name):
self._children = None
self.itemcode = item_code # String 000000
self.itemname = item_name # String 全国
self.children = None
class BreedInfo():
def __init__(self, item_code, item_name):
self.parentcode = None
self._children = None
self.itemcode = item_code # String AM
self.itemname = item_name # String 水产品
self.children = None
class PMarketInfo():
def __init__(self, market_code, market_name):
self.marketCode = market_code
self.marketName = market_name # String 000000/AM
# registerClassAlias("personTypeAlias", Person);
# 注册自定义的Body参数类型,这样数据类型com.itown.kas.pfsc.report.po.HqPara就会在后面被一并发给服务端(否则服务端就可能返回参数不是预期的异常Client.Message.Deserialize.InvalidType)
pyamf.register_class(HqPara, alias='com.itown.kas.pfsc.report.po.HqPara')
pyamf.register_class(BreedInfoPo, alias='com.itown.kas.pfsc.report.po.BreedInfoPo')
pyamf.register_class(ProvincePo, alias='com.itown.kas.pfsc.report.po.ProvincePo')
pyamf.register_class(BreedInfo, alias='com.itown.kas.pfsc.report.po.BreedInfoPo')
pyamf.register_class(PMarketInfo, alias='com.itown.kas.pfsc.report.po.PMarketInfo')
def construct_request(product_code, product_name, provice_code, provice_name, breed_code, breed_name, market_code, market_name, page_num, total_num):
breedInfo = BreedInfoPo(None, product_code, product_name, None)
provice = ProvincePo(provice_code, provice_name)
breedInfoDl = BreedInfo(breed_code, breed_name)
marketInfo = PMarketInfo(market_code, market_name)
# 构造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)
# 第一个是查询参数,第二个是页数,第三个是控制每页显示的数量(默认每页只显示15条)但爬取的时候可以一下子设置成全部的数量
# 构造请求数据
msg.body = [HqPara(breedInfo, provice, breedInfoDl, marketInfo), str(page_num), str(total_num)]
print (str(page_num))
print (str(total_num))
msg.headers['DSEndpoint'] = None
msg.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 getResponse(data):
http_handler = urllib.request.HTTPHandler()
url = 'http://jgsb.agri.cn/messagebroker/amf'
req = urllib.request.Request(url, data, headers={'Content-Type': 'application/x-amf'})
# 解析返回数据
opener = urllib.request.build_opener(http_handler)
return opener.open(req).read()
def getContent(response):
amf_parse_info = remoting.decode(response)
# 数据总条数
total_num = amf_parse_info.bodies[0][1].body.body[3]
info = amf_parse_info.bodies[0][1].body.body[0]
print (info)
return total_num, info
def func():
conn = cx_Oracle.connect('username/password@127.0.0.1:8082/ORCL')
print("数据库连接上了")
cursor_oracle = conn.cursor()
num = 0;
b = '元/公斤';
# 获取数据量
reqData = construct_request('000000', '全部', '370000', '山东省', '000000', '全部', '3707056', '寿光物流园', 1, 2)
rep = getResponse(reqData)
total_num, info = getContent(rep)
# 一次请求完成
reqData = construct_request('000000', '全部', '370000', '山东省', '000000', '全部', '3707056', '寿光物流园', 1, total_num)
rep = getResponse(reqData)
total_num, info = getContent(rep)
for record in info:
print (record)
sql = "insert into PRODUCTPRICE(ID,NAME,PRICE,UNIT,AREA,INDATE) values ('" + str(uuid.uuid1()) + "','" + record["farmProduceName"] + "','" + str(record["averagePrice"]) + "','" + b + "','" + record["marketName"] + "','" + str(record["reportDate"]) + "')"
print(sql)
cursor_oracle.execute(sql)
num = num + 1
if(num > 100):
conn.commit()
num = 0
conn.commit()
cursor_oracle.close()
conn.close()
timer = threading.Timer(86400, func)
timer.start()
# 获取现在时间
now_time = datetime.datetime.now()
# 获取明天时间
next_time = now_time + datetime.timedelta(days=+1)
next_year = next_time.date().year
next_month = next_time.date().month
next_day = next_time.date().day
# 获取明天3点时间
next_time = datetime.datetime.strptime(str(next_year)+"-"+str(next_month)+"-"+str(next_day)+" 03:00:00", "%Y-%m-%d %H:%M:%S")
# # 获取昨天时间
# last_time = now_time + datetime.timedelta(days=-1)
# 获取距离明天3点时间,单位为秒
timer_start_time = (next_time - now_time).total_seconds()
print(timer_start_time)
#定时器,参数为(多少时间后执行,单位为秒,执行的方法)
timer = threading.Timer(10, func)
timer.start()
相关推荐
python爬虫: requests爬取flash播放页面的信息
我们通过查看知道flash类型的网页采取文件格式是amf类型的 AMF(Action Message Format) 是Flash与服务端通信的一种常见的二进制编码模式,其传输效率高,可以在HTTP层面上传输。 python 要和AMF 交互需要一个pyamf 模块 1, 下载pyamf pyamf点击下载 2, 安装的时候发现这个版本不适合我的版本, 经过搜索, 发现了一个解决办法 安装P...
爬虫之动态页面爬取
动态页面爬取
Python轻松实现动态网页爬虫(附详细源码)!
AJAX动态加载网页 一 什么是动态网页 J哥一向注重理论与实践相结合,知其然也要知其所以然,才能以不变应万变。 所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。——来源百度百科 动态网页具有减少工作量、内容更新快、可完成功能多等特点,被很...
python获取动态更新的数据_python3+beautifulsoup动态数据获取想要的内容
这是我的代码:from bs4 import BeautifulSoupimport requestsurl = "http://s8-static.jjwxc.net/getnovelclick.php?novelid=3601&jsonpcallback=novelclick"web_data = requests.get(url)web_data.encoding = "gzip"s...
Pyamf实际应用案例
再次爬取基于Flex技术的某农产品每日价格历史数据 这个是实习期间耽搁时间最长的项目了,通过这个对pyamf这个包算是很熟悉了。不得不说他的请求伪造真的好复杂。。。 顺便吐槽一下,像flash这种当今在网页上见得很少了,但是众多政府网站依然使用,接受html5就那么难吗???还是说懒得换架构和模式?? 网上对pyamf包的使用案例几乎没有,只能从国外找,1.23那天项目已经实践过一次
网络爬虫:爬取动态网页(例如javascript)
经过一段时间的摸索,终于有了一套爬取动态网页的方法,此方法适合大多数的动态网页爬取,至于另外少数的动态网页爬取,还必须利用其它的办法。在此分享给大家。举例:例如在百度中搜索成语词典,显示如下,需要爬取所有的成语词汇。我们可以点击下一页查看,有经验的同学一眼就可以看出这里是使用javascript异步加载的。在网页源码上是找不到的。下面就介绍爬取所有词典的方法 1.点击鼠标右键–>审查元素2.选择N
flex amf的使用
AMF是Adobe独家开发出来的通信协议,它采用二进制压缩,序列化、反序列化、传输数据,从而为Flash 播放器与Flash Remoting网关通信提供了一种轻量级的、高效能的通信方式。如下图所示: [img]http://dl.iteye.com/upload/attachment/177238/a4c46908-53b4-3cb8-8347-6176710cfa9c.gif[/img] ...
Python爬虫教程(一)使用request+Beautiful爬取妹子图
官方文档 以下内容大多来自于官方文档,本文进行了一些修改和总结。要了解更多可以参考官方文档: 官方文档request安装 通过pip安装pip install requestsrequest部分使用示例 import requests response = requests.ge...
AMF3通讯协议实例
为什么80%的码农都做不了架构师?>>> ...
开源amf协议解析封装
amf c# flex服务端协议解析和封装。
从零开始:用ADS 2023手把手教你设计2.4GHz Wi-Fi LNA(基于ATF-54143,附模型文件)
本文详细介绍了如何使用ADS 2023软件设计2.4GHz Wi-Fi频段的低噪声放大器(LNA),基于ATF-54143晶体管。内容涵盖模型导入、直流工作点确定、稳定性优化、噪声匹配等关键步骤,并提供可下载的模型文件包,帮助工程师快速掌握LNA设计技巧。
网络爬虫有什么用?怎么爬?手把手教你爬网页(Python代码)
导读:本文主要分为两个部分:一部分是网络爬虫的概述,帮助大家详细了解网络爬虫;另一部分是HTTP请求的Python实现,帮助大家了解Python中实现HTTP请求的各种方...
【芯片验证随心记】1.SystemVerilog中,rand和randc的区别?如何用constraint实现randc?
在SystemVerilog里,randc 的“不重复循环”特性是用一个 周期性排列器(permutation engine) 实现的,而这个引擎在 LRM 里并没有公开。我们只能在 “用户空间” 用 rand + constraint 去模仿它的行为。每次随机化只取 queue.pop_front(),用完再洗。在4次随机化内,y会依次出现0,1,2,3各一次(顺序随机)每次随机化,x可能是0-3中的任意值,可能连续多次相同。每次随机化时,在未使用的值里随机挑一个;第5次随机化时,重新生成新的排列周期。
在python使用selenium获取动态网页信息并用BeautifulSoup进行解析--动态网页爬虫
在python使用selenium获取动态网页信息并用BeautifulSoup进行解析--动态网页爬虫 转自:https://www.cnblogs.com/bugingcode/p/8297665.html 爬虫抓取数据时有些数据是动态数据,例如是用js动态加载的,使用普通的urllib2抓取数据是找不到相关数据的,这是爬虫初学者在使用的过程中,最容易发生的情况,明明在浏览器里有相应的信...
2026年(新服务器默认密码)最新各大厂商默认凭证大全
本文整理了国内外主流服务器厂商的默认管理接口凭证信息,包括Dell、HPE、浪潮、华为等品牌的管理接口类型、默认用户名/密码和IP地址。特别强调国产服务器在信创环境下的安全风险,指出国内厂商部分型号仍保留固定默认密码(如浪潮admin/admin),而国际厂商多采用随机密码标签。文章提供了新机初始化安全流程建议:查找机箱标签、立即修改默认密码、配置网络隔离、更新固件等。最后提醒运维人员,服务器安全应从首次上电开始重视,管理接口暴露是重大风险点,必须严格执行安全规范。
HFSS实战(三)——过孔via TDR仿真
在上一讲中,主要是通过观察S参数确定via的优化是否达到目标。但S参数只能看到一个整体的结果,并不知道via真实的阻抗是多少?想要单独确定via的阻抗,最好还是通过TDR的仿真。
python解析flv协议(AMF数据)
学习python也有1周了,因为之前学习了golang,所以觉得python和golang有很多类似的地方,比如切片和语法,python的确是一门很好的语言,至少你了解了之后才会发现其实它很强大,编写效率很高,至少目前为止我觉得运行效率也很高,之前没学过python2,所以跳过直接python3,既然是学习总得练练手吧,因为前段时间打算做一个抓直播地址的工具,截取网卡数据包的时候,接触过rtmp协...
为ESXI Host添加v3700 FC存储
物理环境: ESXI Host version 5.1.0 Brocade SAN Switch v3700 Storage 存储和ESXI Host分别用光纤线连接在SAN交换机上 1.查询ESXI Host 的WWN号: 2. SAN交换机上查询存储的WWPN号 SAN交换机: 3.建立zone,添加到cfg文件中 brocade8Gb
利用BeautifulSoup、urllib、selenium爬取动态网站图片
1、导入相关包from selenium import webdriver from bs4 import BeautifulSoup from urllib.parse import urlparse import time from urllib import request import re2、定义代理,防止被服务器拦截global headers headers={ ...
OpenClaw 源代码深度分析报告 &如何把企业自有的MCP server 工具集成到OpenClaw里? 怎样通过OpenAI 风格SDK 解析出来OpenClaw的全部的流式输出内容?
项目属性详情名称OpenClaw版本2026.3.2许可证MIT语言最低运行时包管理器pnpm主要仓库},// 注册工具// 工具实现},});// 注册命令" }),});},方面评价模块化设计⭐⭐⭐⭐⭐ 插件架构清晰,扩展性强协议设计⭐⭐⭐⭐⭐ WebSocket 协议完善,支持多种客户端多渠道支持⭐⭐⭐⭐⭐ 20+ 消息通道,覆盖主流平台安全机制⭐⭐⭐⭐ 配对认证、设备签名、权限控制完善本地优先⭐⭐⭐⭐⭐ 数据本地存储,用户完全控制项目属性详情名称OpenClaw版本。
SAP_SD模块-销售批次策略应用记录
SAP_SD模块-销售批次策略完整案例
Python爬虫学习(四)Beautiful Soup库入门
(四)Beautiful Soup库入门 BeautifulSoup库官方文档 (1) Beautiful Soup库基本元素 Beautiful Soup库是解析、遍历、维护“标签树”的功能库 <p class="title">...</p> <p>..</p> :标签 Tag p :名称 Name (成对出现) class='ti...
青少年C/C++软件编程(四级)等级考试真题及答案解析目录
3. 带通配符的字符串匹配。1. 怪盗基德的滑翔翼。3.最长公共子上升序列。4.宠物小精灵之收服。
python中如何爬取动态页面内容
下面以爬取智联招聘为例讲解下获取动态数据的一般步骤。 首先打开谷歌浏览器输入地址智联招聘地址https://www.zhaopin.com/数据页面,Fn+F12查看网页源代码,然后选择Network——&amp;amp;gt;XHR,可以看到,现在里面什么都没有 2.2然后点击谷歌浏览器的刷新按钮或者按F5刷新页面,可以看到,有一条数据出现了,这个链接就是获取数据的页面API,选择Response,可以看到,...
SIMATIC S7-1200, S7-1500 PID 控制[手册]
SIMATIC S7-1200, S7-1500 PID 控制[手册]
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
4294



被折叠的 条评论
为什么被折叠?



