zoukankan      html  css  js  c++  java
  • python爬取微信小程序(实战篇)

    python爬取微信小程序(实战篇)

    一、背景介绍

    近期有需求需要抓取微信小程序中的数据分析,与一般的网页爬虫类似,主要目标是获取主要的URL地址进行数据爬取,而问题的关键在于如何获取移动端request请求后https加密的参数。本文从最初的抓包到获取URL、解析参数、数据分析及入库等,一步步进行微信小程序的数据爬取。

    此次爬取的目标是微信小程序“财神股票”中的已受理科创版公司名单数据,如下:

    注:抓包、分析、爬取等全过程几乎通用于微信小程序,可以类似的爬取其他小程序测试,原理大同小异。

    二、环境配置

    具体的环境配置参考:Python爬取微信小程序(Charles)

    移动端:iPhone;

    PC端:Windows 10;

    软件:Charles

    注:网络要求较高,请确保网络访问无限制。

    三、Charles抓包

    Charles相关的配置与说明在此前的一篇文章( Python爬取微信小程序(Charles))中有详细说明,此间不再赘述,强调一点就是移动端证书确保始终信任状态

    1. 设置移动端网络代理;

    2. 打开Charles,关闭Windows proxy;

    3. 打开微信小程序,Charles提示如下说明正常连接:

    4. 点击微信小程序后,在Charles中显示如下:

    5. 为了避免过度链接干扰,点击清除按键,清理后,点击“科创版专题”,Charles抓取链接如下:

    6. 点击https://nujump.tigerobo.com,在右端contents中可以看到请求的详细内容(为什么是这个链接而不是别的?我也是一个个点开尝试的…)。

    7. 在右侧的overview中,可以看到URL的value:https://nujump.tigerobo.com/HB_Jumper/ztjump.ashx?topic=8&aris_data=kcb_1_announced_corp&pageIndex=1&pageSize=5

    看到这个链接有木有很熟悉的感觉呢?Method对应的值是GET,也就是说此链接是通过GET方法进行获取与展示数据,在主链接https://nujump.tigerobo.com/HB_Jumper/ztjump.ashx 后采用key与value拼接的方式发送请求,最后两个参数pageIndex=1与pageSize=5,对应第一个页面展示的5条数据,在Charles右侧的contents中,下方选择JSON Text,可以看到对应返回的response如下:

    此处的 ”count”: 110 对应目前共有110条与科创版公司相关的数据。

    8. 在拿到overview中的目标URL之后,直接修改pageSize的值为110,在浏览器中访问链接:https://nujump.tigerobo.com/HB_Jumper/ztjump.ashx?topic=8&aris_data=kcb_1_announced_corp&pageIndex=1&pageSize=110 后显示如下:

    此数据即为小程序中展示的数据,也就是我们此次爬取的对象。

    四、数据分析及入库

    拿到目标URL后,可以采用python的requests库进行数据爬取:

    详情代码此间不再赘述,完整代码参考GitHub:GitHub

    注:

    1. 数据清洗的过程中,剔除了港股股票;
    2. 通过爬取东方财富网获取每家上市公司的股票代码,详情参考GitHub代码;
    3. 上市公司与科创版公司的对应关系为多对多的关系,即一家上市公司可能对应多家科创版公司,一家科创版公司可能对应多家上市公司;
    4. 由于科创版公司目前暂无股票代码等详细信息,故数据的存储方式采用上市公司对应科创板公司的方式存储,具有一定的冗余;
    5. 由于目前所有的数据均存在变化(如新加科创版公司、上市公司又与新的科创版公司相关联、科创版公司又与新的上市公司相关联等),所以最好每次都清空之前的数据,不要只在之前数据的基础上新增。

    五、问题总结

    1. 小程序内容加载缓慢或网络异常:

             在测试时,发现Charles获取一些财经类小程序(新闻联播、财神行情等)均显示正常,抓包等也无问题,但是对于一些电商小程序(京东购物、当当等),移动端有时候可能会显示网页打不开或无法加载,经测试发现与网络关系较大,可能由于网络本身的原因、移动端代理设置等问题导致。

    六、参考链接

    https://blog.csdn.net/HeyShHeyou/article/details/90045204

  • 相关阅读:
    【数学】三分法
    【数学】【背包】【NOIP2018】P5020 货币系统
    【数学】【CF27E】 Number With The Given Amount Of Divisors
    【单调队列】【P3957】 跳房子
    【极值问题】【CF33C】 Wonderful Randomized Sum
    【DP】【CF31E】 TV Game
    【神仙题】【CF28D】 Don't fear, DravDe is kind
    【线段树】【CF19D】 Points
    【字符串】KMP字符串匹配
    【二维树状数组】【CF10D】 LCIS
  • 原文地址:https://www.cnblogs.com/xiao-xue-di/p/12720995.html
Copyright © 2011-2022 走看看