条件爬取Flash网站数据,百度都是不带条件的爬取_爬虫_第二篇

python爬取flash页面的返回数据(flex技术、amf格式、charles抓包) flash页面的返回数据,无法从网页源代码中查看到数据,这种页面的爬取需要借助一个工具——charles,通过它来查看amf。 这里用到一个第三方库pyamf,安装方式: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple py3amf 本文以浙江省地表水水质自动监测数据为例,爬取浙江省所有监测点的五项水质信息,讲述这种传统flash页面数据的爬取过程和注意事项。 一、分析网页 浏览器查看 下面是这个网站的页面和源代码(注意圈出来的部分): 浏 阅读详情

很久很久没写博客了,可能最近半年太懒了,也可能是工作忙,忙的打王者,忙的打游戏,没空写博客,哈哈哈,由于不写博客,很久没妹纸找我问东西了,哈哈,还是动手写写吧,不废话直接开始了

之前学了一周爬虫,写了一个爬虫(经理要求写,没办法,那就学学呗),但是当时没写博客,当时忘记了,很基础的爬取了十万条数据,然后插入数据库,当时遇到很多难题,等有空了总结下吧

经理昨天让我写爬虫,我一心想着之前写过啊,直接根据页面标签拿下来不就完事了,顶多一小时的事,结果看了需求才知道,爬取的flash页面,不存在标签,好吧,那就老规矩百度呗,
这是百度到的爬取Flash网站代码地址
上代码


# coding: utf-8
# agri.gov.cn_amf_client.py
# http://jgsb.agri.gov.cn/flexapps/hqApp.swf数据抓取

# http://jgsb.agri.cn/controller?SERVICE_ID=REGISTRY_JCSJ_MRHQ_SHOW_SERVICE&recordperpage=15&newsearch=true&login_result_sign=nologin

import urllib
import urllib2
from urllib2 import Request
import uuid
import pyamf
import json,datetime
from pyamf import remoting
from pyamf.flex import messaging
class HqPara:
    def __init__(self):
        self.marketInfo = None
        self.breedInfoDl = None
        self.breedInfo = None
        self.provice = None
# 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')
# 构造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条)但爬取的时候可以一下子设置成全部的数量
# 构造请求数据
def getRequestData(page_num,total_num):
    msg.body = [HqPara(),str(page_num), 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):
    url = 'http://jgsb.agri.cn/messagebroker/amf'
    req = Request(url, data, headers={'Content-Type': 'application/x-amf'})
    # 解析返回数据
    opener = urllib2.build_opener()
    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 store2json(info):
    res = []
    for record in info:

        record['reportDate'] = record['reportDate'].strftime('%Y-%m-%d %H:%M:%S')
        record['auditDate'] = record['auditDate'].strftime('%Y-%m-%d %H:%M:%S')
        res.append(record)
    fp = open('info.json','w')
    json.dump(res,fp,indent=4)
    fp.close()




# 获取数据量
reqData = getRequestData(1,2)
rep = getResponse(reqData)
total_num,info = getContent(rep)
# 一次请求完成
reqData = getRequestData(1,total_num)
rep = getResponse(reqData)
total_num,info = getContent(rep)
print info
for record in info:
    print record

store2json(info)

这里用到了抓包工具Charles,之前用过抓包工具Flidder,但是抓不打amf文件,我测试了跟浏览器显示的数据一样都是乱码,然后才用的Charles,这款工具很强大,但是下载很慢,给你们一个我自己的百度网盘吧,我可是下载了1小时才下载到的,且行且珍惜,具体怎么用就不给你们BB了,不会用的话,去百度

这是4.2版本;因为我抓包过程中4.5突然不好使了,就下载的4.2,能用4.5,就用4.5吧,最新的比较好

4.2版本
链接:4.2版本Charles
提取码:eb1b

4.5版本

链接:4.5版本Charles
提取码:sijk

基本上按照百度上那个链接进行操作把你的Python引入一下包,改改配置,基本就可以跑起来程序,跑起来是抓取的全部的信息

在这里插入图片描述图片中的content就是请求内容和响应内容,请求内容Body里面就是需要传的值,具体怎么传请求参数的话,就是难点了,Python大佬勿喷,我学Java的,不擅长Python,所以可能感觉难,结合下面的代码来看,查询条件不就是四个吗,直接传就行了,我一开始也是这么想的,但是那样改的话程序爬不起来,一直报错,不存在该类型什么的

在这里插入图片描述上图我圈起来的也看到了,传的参数不是一个字符串String类型的,所以直接改成字符串就会报错,所以必须创建这四个类来进行传参,这是正常思考的逻辑吧?因此我开始建了四个类,废话不多说,直接上代码

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

创建完这四个类,就可以写个方法进行传参,这里创建四个类的时候遇到一个坑,对于这段代码,Python解释器报错:object() takes no parameters
这个问题没啥说的百度就知道,少下划线的问题,init初始化必须添加两遍下划线的,加上去就行了,然后继续写方法

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)

这一步就是传参初始化,基本没啥技术含量,写个方法而已

然后你又跑程序,发现又报错,说什么不存在class什么的,看看代码,你会发现有一段代码是注册自定义的body

# 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')

好吧,只要需要穿的body实体类,都需要先注册一下,那就根据类型来注册一下啊

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')

注册以后基本就没报错了,如果还报错,就慢慢找,基本都是小问题了,flash传参问题解决其他都不是问题了,恩,来调用方法试试我们写好的代码

在这里插入图片描述在这里插入图片描述哎呦,没有查询全国的7000多条数据了,查到了指定的36条数据,看看网站是不是36条数据呢?

在这里插入图片描述哈哈哈,网站上的36条数据都拿到了,然后就是存数据库,展示数据,那些都是第一次写爬虫遇到的问题以后再写,都快忘记了,改天补上吧,存库的时候一次存一条,那即使淘宝的数据库存10万次数据库,我感觉也够呛,那些坑都过去了,哈哈哈

AMF抓取flex页面数据 抓取AMF协议的flex页面,支持模拟登录和页面抓取。 立即下载

相关推荐

分析动态网页中的flash资源并抓取

抓取网页动态flash资源,进行源代码反编译分析,产生fla文件

python爬取资料_Python爬取FLASH播放器中的资料

Python爬取FLASH播放器中的资料。一、首先了解一下AMF协议:AMF(Action Message Format)是Flash与服务端通信的一种常见的二进制编码模式,其传输效率高,可以在HTTP层面上传输。现在很多Flash WebGame都采用这样的消息格式。AMF协议是基于Http协议的.它的内容处理过程大致是这样:1.从客户端获取Http请求(Request)流.2.对流进行解串行化...

weixin_39998998的博客 321

【WB32库开发】第9章 TIM1高级定时器——输出多路PWM

PWM(Pulse Width Modulation)意为脉冲宽度调制,简称脉宽调制 。在工控行业,PWM信号可以用来调节电机转速、调节变频器以及BLDC电机驱动等;在LED照明行业,可以通过PWM来控制LED的亮暗变化;还可以通过PWM信号来控制无源蜂鸣器发出简单的声音等。 WB32也可输出PWM,需配置WB32上的定时器。 在WB32中有4个定时器,其中TIM1为高级定时器,TIMx(2-4)为通用定时器,这四个定时器均挂载在APB1总线上,每个定时器都可以输出4路PWM。 本章需要使用固件库TIM例程

北海村夫的博客 4637

python 爬取全国农产品批发指数网站 charles 抓取 flash 数据包 分析数据包数据

python 爬取全国农产品批发指数网站 charles 抓取 flash 数据包 分析数据包数据 amf 数据请求与返回格式 flash 数据 完整代码下载:https://github.com/tanjunchen/SpiderProject/tree/master/agriculture #!/usr/bin/env python # -*- coding: utf-8 -*- import requests import uuid import pyamf import da..

tanjunchen的博客 1274

西门子S7-1200与汇川SV660P伺服速度模式实战:从接线到编程全流程

本文详细解析了西门子S7-1200 PLC与汇川SV660P伺服驱动器在速度模式下的集成实战。内容涵盖从硬件接线、伺服参数关键设置(如电子齿轮比)、博图软件组态到PLC编程的全流程,并提供了故障排查与性能优化指南,帮助工程师快速实现精准、稳定的运动控制。

weixin_29248313的博客 480

ASPICE标准快速掌握「1.1. 简介」

ASPICE是汽车软件过程改进能力模型(Automotive SPICE,Automotive - Software Process Improvement and Capability dEtermination)的缩写,是一种针对汽车软件开发过程的国际标准。该标准旨在帮助汽车制造商和供应商改进其软件开发过程,以确保其软件产品的质量和安全性。需要做什么为什么要做技术上的依赖性是什么。

雪云飞星的博客 2291

【Python】Python爬取复旦大学拟录取硕士名单公示——Adobe Flash Player的内容

1.手动获取:下载fiddler抓包工具:https://www.telerik.com/fiddler安装好后打开fiddler,进入网页:http://www.gsao.fudan.edu.cn/2b/22/c1659a142114/page.htmfiddler获取到一系列http请求,选择result为200的逐个点入查看request headers:将src=后的内容添加到www.gs...

Li_Jiaqian的博客 1811

Android15车载系统开机冷启动流程源码解析

本文主要介绍Android15车机系统开机冷启动的流程,暂不包含bootloader,仅从kernel开始直至Launcher首页展示。

jidapenglin28的专栏 253

Python爬虫笔记1-爬虫背景了解

学习python爬虫的背景了解。 大数据时代数据获取方式 如今,人类社会已经进入了大数据时代,数据已经成为必不可少的部分,可见数据的获取非常重要,而数据的获取的方式大概有下面几种。 企业生产的数据,大型互联网公司有海量的用户,所以他们积累数据有天然的优势 数据管理资讯公司 政府/机构提供的公开数据 第三方数据平台购买数据 爬虫爬取数据 ...

weixin_34120274的博客 1108

Python 爬虫实战:医学临床指南爬取(含 PDF 解析与结构化存储)

在当今数字化时代,医学临床指南作为医生进行科学诊疗的重要参考资料,包含大量经过临床验证的诊疗路径和建议。这些指南通常发布在权威医学网站上,数量庞大且更新频繁。如何自动化地抓取并存储这些指南,成为医疗数据分析、医学研究以及医疗 AI 模型训练等工作的关键第一步。本文将系统讲解如何利用 Python 爬虫技术从权威医学网站爬取临床指南内容,并实现 PDF 解析与结构化存储。

u014481728的博客 449

文末含资料链接和视频讲解!YOLOv8集成CoordAtt注意力机制详细教程

本文详细介绍了如何在YOLOv8目标检测框架中集成CoordAtt注意力机制。首先解析了CoordAtt的工作原理,它通过分解式池化将位置信息嵌入到通道注意力中,相比传统注意力机制具有更好的空间信息保持能力。然后提供了PyTorch实现代码解析,包括自适应平均池化、Hard-Swish激活函数等关键实现细节。最后概述了YOLOv8架构,为后续集成CoordAtt提供基础。该教程适合具备深度学习基础的开发者,将理论与实践结合,帮助读者掌握这一目标检测优化技术。

FJN110的博客 266

Python中爬虫实现原理与数据抓取(通用爬虫和聚焦爬虫)

通用爬虫和聚焦爬虫 根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种. 通用爬虫 通用网络爬虫 是 捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。 通用搜索引擎(Search Engine)工作原理 通用网络爬虫 从互联网中搜集网页,采集信息,这些网页信息用于为搜索引擎建立索引从而提供支持,它...

Himalaya-hsf 889

Android系统内存和性能关系的调研

摘要:本文分析了低内存导致性能问题的判断方法和评估思路。通过监控/proc/vmstat中的allocstall_normal、pageoutrun等指标可判断内存回收频率,当MemFree、MemAvailable和Cached均低于500MB时可能出现明显卡顿。全文通过实验和理论验证分析,回答因内存瓶颈导致性能问题的一些分析和解决的思路。

jidapenglin28的专栏 128

Python爬虫中的“静态网页“和“动态网页“!

网络爬虫又称为网络蜘蛛,是一段计算机程序,它从互联网上按照一定的逻辑和算法抓取和下载互联网的网页,是搜索引擎的一个重要组成部分。简单来说,网络爬虫就是一段程序,它模拟人类访问互联网的形式,不停地从网络上抓取我们需要的数据。我们可以定制各种各样的爬虫,来满足不同的需求,如果法律允许,你可以采集在网页上看到的、任何你想要获得的数据。当我们在编写一个爬虫程序前,首先要明确待爬取的页面是静态的,还是动态的,只有确定了页面类型,才方便后续对网页进行分析和程序编写。

zhishi0000的博客 1732

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

通用爬虫和聚焦爬虫的概念

爬虫根据使用场景,网络爬虫可分为通用爬虫和聚焦爬虫两种. 通用爬虫 通用网络爬虫 是 捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。 通用搜索引擎(Search Engine)工作原理 通用网络爬虫从互联网中搜集网页,采集信息,这些网页信息用于为搜索引擎建立索引从而提供支...

didenglei8217的博客 652

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

从Journal Citation Reports网站爬取期刊JCR缩写和ISO缩写

利用Python库Selenium实现从Journal Citation Reports网站爬取期刊JCR缩写和ISO缩写。本文提供爬虫脚本和期刊缩写文件(2026年6月从JCR网站爬取的22643个期刊信息)。

衣者2024的博客 1485

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

python爬虫从0开始!小白一起学!(1)

主要目录包括一.静态页面与动态页面的区别在最最开始学习爬虫的时候,我就不太懂,为什么有的页面可以直接获取,有的还需要去控制台的网络模块抓包。取决于是动态页面还是静态页面啦!

qq_63733838的博客 397

手机抓封包软件_自学爬虫爬取手机数据经验分享,一个月工作量几分钟就搞定...

自学python爬虫有段时间了,在爬取了几个案例网站后,已经掌握了基本的爬虫规则写法,大多数网站的爬虫写法都大同小异,稍微改下代码就能重复使用,完全独立的写了好几个程序,也用爬虫自动下载了一大堆图片,视频和音乐。爬虫批量下载感觉学习爬虫在掌握语法后,自己多动手去写代码,还是比较容易学会的。今天主要和大家聊聊手机端爬虫。因为移动互联网的普及,越来越多的商家专攻手机端,很多甚至没有电脑端的网址。像微信...

weixin_42363022的博客 973

3 静态网页爬取①urllib3库实现爬取

3 静态网页爬取3.1 介绍静态网页爬虫的基本流程3.2 使用urllib3库实现爬取1.生成请求2.请求头处理3. Timeout设置4.请求重试设置5. 生成完整HTTP请求6.完整代码 3.1 介绍 静态网页 在网站设计中,纯粹HTML(标准通用标记语言下的一个应用)格式的网页通常被称为“静态网页”,静态网页是标准的HTML文件,它的文件扩展名是.htm、.html,可以包含文本、图像、声音、FLASH动画、客户端脚本和ActiveX控件及JAVA小程序等。 静态网页是网站建设的基础,早期的网站一

lue_lue_lue_的博客 1956

浏览器自动化神器:OpenClaw+GLM-4.7-Flash爬取合规数据

本文介绍了如何在星图GPU平台上自动化部署【ollama】GLM-4.7-Flash镜像,实现高效合规的网页数据采集。该镜像结合OpenClaw工具,能够智能解析动态网页内容,精准提取新闻标题、发布时间等关键信息,适用于舆情监控、竞品分析等商业场景,大幅提升数据获取效率。

weixin_33308579的博客 200

基于Java对Flash网站的抓取

AMF协议是基于Http协议的,Flash交互的一种协议,详细请百度。本以为应该很难,搞好了之后,真尼玛简单,分享一下。 Maven 依赖 flex-messaging-common-4.7.3.jar flex-messaging-core-4.7.3.jar 其他 代码(废话不多说) AMFConnection connection = new AMFConnection(); ...

IT火火的0与1 1705

爬虫介绍

通用爬虫和聚焦爬虫 根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种. 通用爬虫 通用网络爬虫 是 捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。 通用搜索引擎(Search Engine)工作原理 通用网络爬虫 从互联网中搜集网页,采集信息,这些网页信息用于为搜索引擎建立索引从而提供支持,它...

liazylee的博客 150

flash打造查询搜索引擎关键字位置的代码

//制作蚁伐 yifa2008@hotmail.com 可以任意修改使用  //最后更新 2005-11-9 //2005-11-9 将yisou调整为yahoo中国搜索(yahoo中国策略改变,yisou谢幕) //2005-9-24 修正包括baidu推广的排名位置  fscommand("allowscale",false); var keyw_s:String;//...

hgfghwq10 144

SEO基础_搜索引擎爬取、索引和排名基本规则

一、爬取数据 搜索引擎通过网页之间的链接来爬取互联网的内容。爬取的起点理论上可以是任何地方,但是理想情况是从一些被信任的网站上开始。 二、排名的基本依据(一)相关度 即网页的内容与用户搜索内容的相关程度。一般下面的情况相关度会提高: 查询的内容在文中多次出现,在文件标题或者重要的小标题出现,页面有来自相关页面并使用相关锚文件并使用相关锚文字的链接。 (二)重要度 即与用户查询内容相

qq_20659385的博客 1438
上一篇: SpringBoot传参,接收参数问题
下一篇: XXL-SSO单点登录___整合APP手机端+PC端
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值