爬虫实战之华为应用市场

2023-11-17

目录

一、需求说明

二、步骤

1、检查当前页面的URL所获得的响应的数据

        ①笨办法——程序验证(不建议)

        ②简单办法——抓包

        ③验证(抓包,推荐) 

        ④动态加载验证

        ⑤查找页面的信息

 2、获取排行页面数据

         ①操作  ​

         ②源码

         ③信息解析

 3、详情页面分析

        ①寻找URL

       ②验证URL

         ③获取URL

         ④获取内容

三、源码


一、需求说明

        爬取华为应用市场排行页面下的APP的详情页

二、步骤

1、检查当前页面的URL所获得的响应的数据

        ①笨办法——程序验证(不建议)

                将URL复制到python环境中,通过requests的四步去得到其相应的内容

        ②简单办法——抓包

                通过检查页面找到当前页的相应内容,然后检查里面的内容是否是想要的

                先在页面点鼠标右键,然后选项的最下面就是检查了,然后进行如下操作

        ③验证(抓包,推荐) 

 

         根据结果显示,通过URL得到的内容不是页面所呈现的内容,做出可能是ajax的动态加载

        ④动态加载验证

        ⑤查找页面的信息

        通过上一步的验证发现,其得到的内容并不是页面的内容,所以加下来要继续查找;

        查找方向为全部的响应信息

 2、获取排行页面数据

         ①操作  

 

         ②源码

import requests
import json
if __name__ == '__main__':
    url = 'https://web-drcn.hispace.dbankcloud.cn/uowap/index?method=internal.getTabDetail&serviceType=20&reqPageNum=1&uri=1ca1964fe0c343cbab12f94d6dc5ef7e&maxResults=25&zone=&locale=zh'
    headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36'
        }

    '''
    https://web-drcn.hispace.dbankcloud.cn/uowap/index?method=internal.getTabDetail&serviceType=20&reqPageNum=1&maxResults=25&uri=app|C5683&shareTo=&currentUrl=https%3A%2F%2Fappstore.huawei.com%2Fapp%2FC5683&accessId=&appid=C5683&zone=&locale=zh
   https://web-drcn.hispace.dbankcloud.cn/uowap/index?method=internal.getTabDetail&serviceType=20&reqPageNum=1&maxResults=25&uri=app|C10652857&shareTo=&currentUrl=https%3A%2F%2Fappstore.huawei.com%2Fapp%2FC10652857&accessId=&appid=C10652857&zone=&locale=zh
    '''
    id_list = []
    response = requests.get(url=url,headers=headers).json()
    print(response)

         ③信息解析

 3、详情页面分析

        ①寻找URL

        重复上面的步骤去检查详情页的情况,找到所需要的数据,然后通过对比URL寻找规律,发现有一个编码是不一样的,而此编码保存在上一个页面的获取到的信息中(可以通过将获取到的数据保存到json文件中,然后通过快捷键去查找)

 

       ②验证URL

        观察URL发现得到的区别是处在一大串的字符串中,也就是说无法将其分化出来;此时要进行的一个操作就是将区别后面的一长串字符串进行删除之后,然后将其拿到浏览器去验证跟删除前得到的页面是否一致;

        通过验证发现是一样的,也就是说后面的数据是可有可无的,所以页面的URL就是基础的字符串拼接上ID

         ③获取URL

        在知道了其结构之后,现在的需求就是获取ID的值了,而ID的值在排行页面获取到的数据中;

        而排行页面获取到数据是字典的格式,所以接下来就是遍历字典,获得想要的值

         ④获取内容

        得到URL之后,就按照爬取页面的四部曲去获得内容了,四部曲详情可以查看上篇文章

三、源码

# -*- coding: utf-8 -*-
import requests
import json
if __name__ == '__main__':
    url = 'https://web-drcn.hispace.dbankcloud.cn/uowap/index?method=internal.getTabDetail&serviceType=20&reqPageNum=1&uri=1ca1964fe0c343cbab12f94d6dc5ef7e&maxResults=25&zone=&locale=zh'
    headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36'
        }
    params = {
        'access-control-allow-credentials': 'true',
        'access-control-allow-origin': 'https://appstore.huawei.com',
        'Access-Control-Expose-Headers': 'session-valid',
        'Cache-Control': 'no-store',
        'Connection': 'keep-alive',
        'content-encoding': 'gzip',
        'Content-Type': 'application/json',
        'Date': 'Thu, 19 May 2022 12:31:17 GMT',
        'Pragma': 'no-cache',
        'Server': 'elb',
        'Transfer-Encoding': 'chunked',
        'X-Content-Type-Options': 'nosniff',
        'X-XSS-Protection': '1',
    }
    '''
    https://web-drcn.hispace.dbankcloud.cn/uowap/index?method=internal.getTabDetail&serviceType=20&reqPageNum=1&maxResults=25&uri=app|C5683&shareTo=&currentUrl=https%3A%2F%2Fappstore.huawei.com%2Fapp%2FC5683&accessId=&appid=C5683&zone=&locale=zh
   https://web-drcn.hispace.dbankcloud.cn/uowap/index?method=internal.getTabDetail&serviceType=20&reqPageNum=1&maxResults=25&uri=app|C10652857&shareTo=&currentUrl=https%3A%2F%2Fappstore.huawei.com%2Fapp%2FC10652857&accessId=&appid=C10652857&zone=&locale=zh
    '''
    id_list = []
    response = requests.get(url=url,params=params,headers=headers).json()
    for dic in response['layoutData']:
        for id in dic['dataList']:
            id_list.append(id['appid'])
    detail_url = 'https://web-drcn.hispace.dbankcloud.cn/uowap/index?method=internal.getTabDetail&serviceType=20&reqPageNum=1&maxResults=25&uri=app|'
    all_content = []
    for id in id_list:
        url_new = detail_url + id
        content = requests.get(url=url_new,headers=headers).json()
        all_content.append(content)
    fp = open('./content.json','w',encoding='utf-8')
    json.dump(all_content,fp=fp,ensure_ascii=False)
    print('over')

具体分析和思路详解见上篇博客

CSDNhttps://mp.csdn.net/mp_blog/creation/editor/124869764

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

爬虫实战之华为应用市场 的相关文章

随机推荐

  • 【uni-app】css 关于 calc()函数计算无效

    计算符 注 计算 符前后都需要空格 否则计算无效
  • 华为OD机试真题 Java 实现【最多提取子串数目】【2023Q1 100分】

    一 题目描述 给定由 a z 26 个英文小写字母组成的字符串 A和 B 其中A中可能存在重复字母 B 中不会存在重复字母 现从字符串 A 中按规则挑选一些字母 可以组成字符串 B 挑选规则如下 同一个位置的字母只能被挑选一次 被挑选字母的
  • ue4加载本地版本_【虚幻4】创建本地数据库

    简介 这里我们主要通过使用Data table实现本地数据库 Data table可以用来保存一些用户配置 或者常用变量 或者用来实时更新外部表格数据到虚幻4中 一 创建Data table 1 首先创建Structure结构 这里我已经创
  • 我用什么写Python?

    通常来说 每个程序员都有自己趁手的兵器 代码编辑器 你要是让他换个开发环境 恐怕开发效率至少下降三成 然而 每个人对编辑器的喜好各不相同 甚至引发出诸如 神的编辑器 与 编辑器之神 这种信仰之争 但也正由此可见 个性化的编辑器对于一个程序员
  • 【FICO系列】SAP FICO 凭证错误:BKPFF$PRDCLN800在FI中达到的项目最大编号

    公众号 SAP Technical 本文作者 matinal 原文出处 http www cnblogs com SAPmatinal 原文链接 FICO系列 SAP FICO 凭证错误 BKPFF PRDCLN800在FI中达到的项目最大
  • 无法访问目标主机的原因及其和请求超时的区别

    使用ping命令时经常会遇到这两种情况 就表示网络出了问题 无法访问目标主机的原因 可以看到 无法访问目标主机 是来自一个IP的回复 实际上那个IP是一个路由器 因此 无法访问目标主机 实际上数据是发出去并且收到回复的 只不过收到的回复是别
  • 数据结构和算法(递归概念、迷宫回溯问题和八皇后问题代码实现)

    递归的概念 递归能够做解决什么问题 使用递归时需要注意的问题 递归的第一个应用 迷宫回溯问题 迷宫模拟 定义一个8 7的数组模拟迷宫 1表示围墙 0表示可以走的路 图中左上红圈为起点 右下红圈为终点 利用代码找到从起点到终点的路径 使用递归
  • 【Python】代码实现LL(1),LR(1)上下文无关文法(Stack()类)

    任务要求 针对书上第三章中的表达式文法 采用LL 1 LR 1 进行分析 相关文法 需要进行消除左递归等操作 顺手分享一下课本资源好了 可能不是最新版 排版略有点别扭 后文的书上内容就是指这本书 编译原理 陈意云 文字版 提取码 e0ag
  • Android Studio如何添加工程(project)为library(针对非gradle)

    这篇文章还是针对非gradle build的工程 gradle build有一些差别 在Eclipse要引用别的工程为本工程的library很简单 但是在Android Studio还是稍稍有点小复杂的 那如何引用别的工程为本工程的libr
  • 网络编程——TCP并发服务器模型

    1 多线程中的newfd 能否修改成全局 不行 为什么 因为如果是全局变量 文件描述符就是唯一的 所有的客户端都会在同一个文件描述符通信 2 多线程中分支线程的newfd能否不另存 直接用指针间接访问主线程中的newfd 不行 为什么 如果
  • 微信小程序-仿智行火车票12306

    微信小程序 仿智行火车票12306 微信小程序 仿智行火车票12306 主页有轮播图 有导航栏 有个人中心 可以实现火车票 飞机票 汽车票的选择 适合初学者学习 下面是示例图片 下载链接 https download csdn net do
  • Linux系统图形界面和命令行界面之间的切换

    一 系统不在虚拟机中的情况 使用ctrl alt F1 6切换到命令行界面 ctrl alt F7切换到图形界面 二 系统在虚拟机中的情况 Ctrl Alt shift F1 6切换到命令行界面 使用Alt F7返回到图形界面 注 以上方法
  • hashmap中为什么使用红黑树?

    在回答这个问题之前 我们先了解一下有关二叉树的基本内容 二叉排序树 又称二叉查找树 1 若左子树不为空 则左子树上所有结点的值均小于根结点的值 2 若右子树不为空 则右子树上所有结点的值均大于根节点的值 3 左右子树也为二叉排序树 平衡二叉
  • 2017 ICCV之语义分割:Cascaded Feature Network for Semantic Segmentation of RGB-D Images

    Cascaded Feature Network for Semantic Segmentation of RGB D Images 目前的问题 1 为了计算对象 场景关系的表示 最近大量的分割网络使用一组感受野来丰富卷积特征的文本信息 这
  • book_read_link

    结构性改革 黄奇帆 微信读书 分析与思考 黄奇帆的复旦经济课 黄奇帆 微信读书
  • java通过web3j获取ETH交易明细

    我们在项目里面如果想要得到用户的ETH交易明细怎么做呢 有两种方式 1 直接获取ETH最新块的交易明细 2 通过块获取用户的交易明细 废话不多说 直接贴代码看了 package com example demo web3jLog impor
  • pdf.js引入方式及初始化配置

    官方下载地址 Getting StartedA general purpose web standards based platform for parsing and rendering PDFs http mozilla github
  • actuator--基础--04--Springboot集成

    actuator 基础 04 Springboot集成 代码位置 https gitee com DanShenGuiZu learnDemo tree master actuator learn actuator01 1 代码 1 1 依
  • MongoDB游标

    数据库会使用游标返回 find 的执行结果 游标的客户端实现通常能够在很大程度上对查询的最终输出进行控制 你可以限制结果的数量 跳过一些结果 按任意方向的任意键组合对结果进行排序 以及执行许多其他功能强大的操作 要使用 shell 创建游标
  • 爬虫实战之华为应用市场

    目录 一 需求说明 二 步骤 1 检查当前页面的URL所获得的响应的数据 笨办法 程序验证 不建议 简单办法 抓包 验证 抓包 推荐 动态加载验证 查找页面的信息 2 获取排行页面数据 操作 源码 信息解析 3 详情页面分析 寻找URL 验