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

下面是“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 多线程重启方法

    Python是一种单线程语言,但是它提供了多线程编程的实现机制。当Python程序需要同时处理多个任务时,可以使用多线程编程技术,多个共享内存资源的线程可以同时执行,提高了程序的执行效率。但是多线程编程也会引发一些问题,比如多线程竞争、线程死锁等。本攻略将会详细讲解Python多线程的重启方法,以及重启方法的两个示例说明。 什么是线程重启? 多线程编程中,当…

    python 2023年5月18日
    00
  • python爬虫之模拟登陆csdn的实例代码

    本攻略将介绍如何使用Python爬虫模拟登陆CSDN,并获取用户信息。我们将使用requests库和BeautifulSoup库实现模拟登陆和解析HTML响应。 获取登录页面 我们首先需要获取CSDN的登录页面,以便获取登录所需的参数。以下是一个示例代码,用于获取CSDN的登录页面: import requests from bs4 import Beaut…

    python 2023年5月15日
    00
  • 在python image 中实现安装中文字体

    要在Python的image模块中使用中文字体,需要进行以下步骤: 安装中文字体 首先需要在操作系统中安装中文字体。不同操作系统的安装步骤略有不同,但一般来说可以通过下载字体文件,然后在系统中进行安装。以Ubuntu为例,我们可以通过以下命令安装中文字体: sudo apt-get install fonts-wqy-zenhei 导入中文字体 安装完成中文…

    python 2023年5月20日
    00
  • python 列表元素左右循环移动 的多种解决方案

    在Python中,我们可以使用多种方法来实现列表元素的左右循环移动。下面将介绍三种常用的解决方案。 解决方案一:使用切片语法 使用切片法是一种简单而直的方法,可以实现列表元素的左右循环移动。具体实现方法是:将列表的后k个元素切片出来,后将其与列表的前n-k个元素拼接起来,得到一个新的列表。 下面是一个示例,演示了如何使用片语法实现列表元素的左右循环移动: #…

    python 2023年5月13日
    00
  • 基于Python实现给喜欢的主播自动发弹幕

    这里我们将讨论如何使用 Python 编写脚本,实现给喜欢的主播自动发弹幕的功能。在本文中,我们将使用 Selenium WebDriver 和 Chrome 浏览器来实现模拟浏览器操作,自动发送弹幕。 1.安装 Selenium WebDriver 和 Chrome 浏览器 首先,我们需要安装 Selenium WebDriver 和 Chrome 浏览器…

    python 2023年5月19日
    00
  • windows下python安装paramiko模块和pycrypto模块(简单三步)

    下面给出“windows下python安装paramiko模块和pycrypto模块(简单三步)”的完整攻略。 一、安装pip 由于python自带了一个包管理工具pip,我们可以通过pip来安装需要的库。如果你的电脑已经安装了pip,可以跳过这一步。否则,请按照以下步骤安装pip。 在命令行中输入以下命令(注意大小写): python get-pip.py…

    python 2023年5月14日
    00
  • Python异常处理如何才能写得优雅(retrying模块)

    Python异常处理如何才能写得优雅(retrying模块) 在Python编程中,异常处理是非常重要的一部分。为了让代码更加优雅,我们可以使用retry块来异常。本文将详细讲解如何使用retrying模块来优雅地处理异常,包括retrying模块的安装、方法和两个示例。 安装retrying模块 在使用retrying模块之前,我们需要先安装它。可以使用命…

    python 2023年5月13日
    00
  • Python中安装库的常用方法介绍

    Python中安装库的常用方法介绍 Python拥有大量的第三方库,包含了各种各样的功能,如数据分析、Web开发、机器学习等。本文将介绍Python中安装库的常用方法。 pip安装 pip是Python的包管理工具,可以方便地安装、卸载和更新Python库。一般情况下,我们可以使用pip来安装Python库。 安装库的命令为pip install,例如安装N…

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