2022新版闲鱼爬虫系列文章3(附源码持续更新)

说明

文章首发于HURUWO的博客小站,本平台做同步备份发布。

如有浏览或访问异常图片加载失败或者相关疑问可前往原博客下评论回复。

原文链接 2022新版闲鱼爬虫系列文章1(附源码持续更新)直接点击即可前往访问。

更多技术文章访问本人博客HuRuWo的技术小站,包括Android 逆向 app,闲鱼爬虫 微信爬虫 抖音爬虫 群控 等相关知识

也可关注公众号 'wan_coder' 第一时间收到文章更新

文章目录

2022新版闲鱼爬虫系列文章1总目录(附源码持续更新)

2022新版闲鱼爬虫系列文章2数据拦截(附源码持续更新)

2022新版闲鱼爬虫系列文章3数据保存(附源码持续更新)

2022新版闲鱼爬虫系列文章4消息提醒(附源码持续更新)

前言

这篇文章我们先来解决数据保存和转发的问题

也就是关于数据流向服务端的功能。

源代码

想直接体验效果的可以前往源代码

https://github.com/HuRuWo/PickUpTrash

直接开启体验

charles的数据包处理

很遗憾 charles没有强大的脚本脚本功能。对应数据包有两个处理方式

在工具栏里面 有一些关于数据包的处理方式。

文档地址:

https://www.charlesproxy.com/documentation/tools/

Map

map 就是映射的工具

有两个

一个映射到一个地址 Map Remote Tool
一个映射到本地
Map Local Tool

显然映射并不是我们想要的功能,它通常用来做测试数据模拟。

Rewrite 

数据包或者请求的拦截和修改

也只能修改了,但不能把数据拉下来保存。

显然也不是想要的功能。

Auto Save

数据包的自动保存功能:

自动定时保存数据,这就达到了我们想要采集数据的目的了。

只要分析保存的文件即可。

设置自动保存

1.tools->auto save
2.设置保存类型和位置和间隔

3.立即生效

可以看到目录下保存好了一个很大的json

分析可以知道 想要的数据结果全在里面。


"body": {
                "text": "{\"api\":\"mtop.taobao.paramservice.request\",\"data\":{\"expires_in\":\"0\",\"result\":[\"idlefish_feeds_root_trigger_rt2_algo_2369986499:ok\"]},\"ret\":[\"SUCCESS::调用成功\"],\"v\":\"1.0\"}",
                "charset": "UTF-8"
            }

读取和处理解析数据文件

简单的写一个python脚本

1.以load的方式读取
2.开启轮询 发现新文件立即载入
3.解析存入sql
4.删掉文件 避免占用过多的磁盘空间

我只做一个简单的示例

代码细节就参考源码即可:

读取文件

def read_file():
    file_list = get_file_dir_list('data_save')
    for file in file_list:
        f = open(file, 'r', encoding='utf-8')
        js_data = f.read()
        response_list = json_data_load(js_data)
        filter_response(response_list)
        # 这里你可以选择删除文件 也可以留着
        f.close()
        os.remove(file)

def get_file_dir_list(file_dir):
    file_list = []
    for root, dirs, files in os.walk(file_dir):
        for file in files:
            if os.path.splitext(file)[1] == '.chlsj':
                file_list.append(os.path.join(root, file))
        return file_list

解析字段

过滤你自己想要的数据包就行

def json_data_load(js_data):
    tao_response_list = []
    try:
        json_data = json.loads(js_data)
        for data in json_data:
            # 过滤 请求 只留下搜索结果这一栏的数据

            # 搜索结果页面
            if data['host'] == 'acs.m.taobao.com' and 'mtop.taobao.idle.search.glue' in data['path']:
                response = data['response']['body']['text']
                tao_response_list.append(response)
            # 详情页面
            # elif data['host'] == 'acs.m.taobao.com' and 'mtop.taobao.idle.awesome.detail' in data['path'] :
            #     response = data['response']['body']['text']
            #     tao_response_list.append(response)

        return tao_response_list
    except Exception as e:
        e.__traceback__
        return tao_response_list

我这里随便过滤了一下

寻找想要的单子

def filter_response(response_list):
    """
    找出目标的 结果 发出通知
    :param response_list:
    :return:
    """
    for response in response_list:
        json_response = json.loads(response)
        resultList = json_response['data']['resultList']
        for result in resultList:
            ## 这里就是自己过滤想要触发提醒的条件了
            # 比如包邮可以了
            args = result['data']['item']['main']['clickParam']['args']
            tagname = args.get('tagname')
            if tagname and '包邮' in tagname:
                robot_tools.send_to_qywx(tagname,'[]')

这里条件过滤一下即可

比如你想要 本地的 价格低于100块的手机 就可以这样设置。

args = result['data']['item']['main']['clickParam']['args']

里面包含了所有你要的字段。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注