python逆向微信指数爬取实现步骤

yizhihongxing

下面是“Python逆向微信指数爬取实现步骤”的完整攻略。

步骤一:安装依赖库

在开始实现微信指数爬取之前,需要安装一些依赖库:

  • requests:用于请求数据;
  • execjs:用于执行JS代码;
  • pandas:用于处理数据;
  • numpy:用于科学计算。

你可以使用以下命令进行安装:

pip install requests execjs pandas numpy

步骤二:爬虫初步

首先我们需要打开微信指数官网,在检查元素中,可以发现指数相关的数据是通过JS渲染的。但是如果我们直接访问JS链接得到的数据是无法直接处理的。因为微信指数有反爬虫机制,需要我们先访问/security/verifycode/取得验证码后,再带上验证码请求JS链接中的数据。

以下是取得验证码的示例代码:

import requests
import time

verify_session = requests.session()

def get_verify_img():
    url = "https://index.weixin.qq.com/security/verifycode/"
    headers = {
        "Referer": "https://index.weixin.qq.com/",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:61.0) Gecko/20100101 Firefox/61.0",
    }
    img = verify_session.get(url, headers=headers).content
    return img

def get_verify_code(img):
    url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"
    headers = {
        "Content-Type": "application/x-www-form-urlencoded",
    }
    params = {
        "access_token": "your_access_token",
    }
    img_str = base64.b64encode(img).decode()
    data = {
        "image": img_str,
    }
    r = requests.post(url, headers=headers, params=params, data=data).json()
    code = r['words_result'][0]['words']
    return code

image = get_verify_img()
code = get_verify_code(image)
print('验证码:', code)

其中,get_verify_img()函数用于获取验证码图片,get_verify_code(img)函数调用百度的OCR接口完成验证码识别。这里需要你先去百度AI开放平台上注册账号,取得OCR接口的access_token

需要注意的是,微信指数每次打开页签时都会访问/security/verifycode/获取验证码,使用上述获取验证码的示例时需要注意:验证码只能使用一次,如果验证码使用错误,则需要重新请求获取。

步骤三:JS处理

除验证码之外,JS也是利用反爬虫机制的一种手段。通过浏览器开发者工具,我们可以获得JS链接。再通过JS解码得到请求URL和headers。

以下是JS解码代码示例:

import execjs

def decode_js(js):
    ctx = execjs.compile(js)
    return ctx.call('decode')

url = decode_js(js)['url']
headers = decode_js(js)['headers']

其中,decode_js(js)函数传入需要解码的JS代码,并完成解码操作。

步骤四:数据获取

完成前三步后,我们可以得到请求URL和headers。接下来,就是发送请求,获取数据的阶段。具体操作如下:

import pandas as pd
import json

def get_data():
    url = 'xxxxxx'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
        'Referer': 'https://index.weixin.qq.com/',
        'Cookie': 'xxxxxxxx', # 你的Cookie信息
    }
    params = {
        'r': 'index%2Fgetclassinfo',
        's': 'weixin',
        'c': 'main',
        'type': '1',
        'query': '',
        'begin_date': '20210425',
        'end_date': '20210425',
        'pagesize': '5',
        'page': '1',
        'needIndent': 'true',
        'needCircle': 'true',
        'uuid': 'xxxxxxxx', # 你的uuid信息
    }
    resp = requests.get(url, headers=headers, params=params)
    data = json.loads(resp.text)
    df = pd.DataFrame(data['data']['list'])
    return df

其中,get_data()函数完成请求操作,并将请求回来的数据转为DataFrame形式进行处理。

示例一:抓取公众号近七天的指数数据

以下是实现抓取的代码示例:

begin_date = '20210720' # 往前7天时间为:20210714
end_date = '20210720'
pages = 3 # 需要获取的页码数

df_all = pd.DataFrame()

for page in range(pages):
    df = get_data(page+1, begin_date, end_date)
    df_all = pd.concat([df_all, df], ignore_index=True)
    time.sleep(2)

df_all.to_excel('./微信指数数据.xlsx', index=False, encoding='utf-8')

其中,get_data(page, begin_date, end_date)函数完成了请求的操作,多页数据的获取我们可以使用for循环来完成。

示例二:抓取单个关键词在近七天的指数数据

以下是实现抓取的代码示例:

import datetime

keyword = 'python'
begin_date = '20210720' # 往前7天时间为:20210714
end_date = '20210720'

dt_begin = datetime.datetime.strptime(begin_date, '%Y%m%d').date()
dt_end = datetime.datetime.strptime(end_date, '%Y%m%d').date()

date_list = [datetime.datetime.strftime(dt_begin+datetime.timedelta(days=i), '%Y%m%d') for i in range((dt_end-dt_begin).days+1)]

df_all = pd.DataFrame()

for date in date_list:
    df = get_data(keyword, date, date)
    df_all = pd.concat([df_all, df], ignore_index=True)
    time.sleep(2)

df_all.to_excel('./微信指数数据.xlsx', index=False, encoding='utf-8')

其中,get_data(keyword, begin_date, end_date)函数完成了请求的操作,为了获取同一关键词在不同时间段的指数数据,我们需要使用datetime库和date_list列表,循环遍历每个时间点,调用get_data()函数并将结果进行拼接。

以上是Python逆向微信指数爬取的实现步骤和两条示例说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python逆向微信指数爬取实现步骤 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 用python结合jieba和wordcloud实现词云效果

    下面是用 Python 结合 jieba 和 wordcloud 实现词云的完整攻略: 1. 安装所需库 首先需要确保已经安装了需要用到的 jieba 和 wordcloud 库。如果没有安装,可以在控制台使用以下命令安装: pip install jieba pip install wordcloud 2. 准备文本数据 准备需要生成词云的文本数据,可以是…

    python 2023年5月20日
    00
  • 对pyqt5多线程正确的开启姿势详解

    对pyqt5多线程正确的开启姿势详解 在使用PyQt5开发GUI程序时,如果需要进行一些耗时的操作,不适合在主线程中进行,因为这会导致GUI界面的卡顿,使用户体验变得不好。因此,我们需要使用多线程来完成一些耗时操作。 但是,在使用PyQt5多线程时,有一些需要注意的事项,否则可能会导致程序崩溃或者不稳定。本文主要介绍对pyqt5多线程正确的开启姿势详解。 使…

    python 2023年5月19日
    00
  • Python中修改字符串的四种方法

    Python中修改字符串的四种方法 Python中字符串是不可变的,也就是说,在创建了一个字符串后,它就不能被改变。但是有时候我们需要对字符串进行修改操作,这时候就需要应用到一些技巧。下面就来讲解Python中修改字符串的四种方法。 1. 使用replace方法 replace方法是Python中常用的字符串方法之一,它可以将字符串中的指定子串替换为另一个子…

    python 2023年6月5日
    00
  • Django简介 安装下载 app概念 主要目录介绍

    目录 Django简介 前戏 Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。 一、版本问题 Django1.X: 同步 1.11 Django2.X: 同步 2.22 Django3.X: 同步 3.2 Djan…

    python 2023年4月25日
    00
  • 详解Pandas和NumPy的区别

    Pandas和NumPy是Python中重要的数据分析库,两者都是基于Python语言开发的。两者有很多相似之处,比如都适用于数据的处理、分析和可视化,但也有很大的差异。下面将详细讲解Pandas和NumPy的区别。 1. 数据类型 NumPy中有一个基本数据类型ndarray,是用于科学计算中处理大型数据集的基本结构。该结构是多维数组,支持基本的数学和统计…

    python-answer 2023年3月25日
    00
  • 如何将Python脚本打包成exe应用程序介绍

    当我们需要将 Python 脚本打包成可执行的二进制文件时(exe格式),通常可以使用 PyInstaller 或者 cx_Freeze 等第三方库来进行打包。下面我将为大家介绍如何使用 PyInstaller 和 cx_Freeze 来将 Python 脚本打包成 exe 应用程序。 PyInstaller PyInstaller 安装 可以通过 PyPI…

    python 2023年5月30日
    00
  • Python合并字符串的3种方法

    Python是一种强大的编程语言,同时也是一个非常好用的字符串处理工具。在Python中,我们可以使用多种方式合并字符串,以下是Python合并字符串的3种方法及详细攻略。 1. 使用字符串拼接符号 “+” 进行字符串合并 我们可以使用“+”运算符来合并两个或多个字符串。合并多个字符串时,可以先定义一个空字符串变量,使用 “+” 连接符将其与其他字符串拼接起…

    python 2023年6月5日
    00
  • python解析xml文件方式(解析、更新、写入)

    在Python中,可以使用不同的库来解析XML文件,如ElementTree、lxml、xml.dom等。以下是Python解析XML文件的详细攻略: 解析XML文件 要解析XML文件,可以使用ElementTree库。以下是解析XML文件的示例: import xml.etree.ElementTree as ET tree = ET.parse(‘dat…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部