【实现一套爬虫数据抓取平台】[3-5-03] 微博长短地址转换

news/2025/2/26 13:28:29

文章目录

  • 零、系列目录
  • 一、背景
  • 二、代码
  • 三、总结

零、系列目录

写这套文章的时候,不会完全按照目录的顺序一篇一篇写, 大家可以到目录中直接找到对应的章节进行查看。

点我跳转

一、背景

新浪微博有两类地址,分别是:

# pc站地址
https://weibo.com/2214257545/LgUW8DlCG

# mob站地址
https://m.weibo.cn/status/4740321169377914

这两个地址对应的是同一篇微博,实际使用过程中,需要根据拿到的不同地址,灵活判断是否需要转换地址来进行解析。

二、代码

完整代码地址:点击跳转

#!/bin/bash
# -*- coding=utf-8 -*-

ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"


# 10进制转为62进制
def base62_encode(num, alphabet=ALPHABET):
    """Encode a number in Base X
    `num`: The number to encode
    `alphabet`: The alphabet to use for encoding
    """
    if num == 0:
        return alphabet[0]
    arr = []
    base = len(alphabet)
    while num:
        rem = num % base
        num = num // base
        arr.append(alphabet[rem])
    arr.reverse()
    return ''.join(arr)


# 62进制转为10进制
def base62_decode(string, alphabet=ALPHABET):
    """Decode a Base X encoded string into the number
    Arguments:
    - `string`: The encoded string
    - `alphabet`: The alphabet to use for encoding
    """
    base = len(alphabet)
    strlen = len(string)
    num = 0
    idx = 0
    for char in string:
        power = (strlen - (idx + 1))
        num += alphabet.index(char) * (base ** power)
        idx += 1
    return num


# mid转换为id
def mid2id(mid):
    mid = str(mid)[::-1]
    size = int(len(mid) / 7) if len(mid) % 7 == 0 else int(len(mid) / 7 + 1)
    result = []
    for i in range(size):
        s = mid[i * 7: (i + 1) * 7][::-1]
        s = base62_encode(int(s))
        s_len = len(s)
        if i < size - 1 and len(s) < 4:
            s = '0' * (4 - s_len) + s
        result.append(s)
    result.reverse()
    return ''.join(result)


# id转换为mid
def id2mid(id):
    id = str(id)[::-1]
    size = int(len(id) / 4) if len(id) % 4 == 0 else int(len(id) / 4 + 1)
    result = []
    for i in range(size):
        s = id[i * 4: (i + 1) * 4][::-1]
        s = str(base62_decode(str(s)))
        s_len = len(s)
        if i < size - 1 and s_len < 7:
            s = (7 - s_len) * '0' + s
        result.append(s)
    result.reverse()
    return ''.join(result)


if __name__ == '__main__':
    print('mdi2id: ' + mid2id('4740321169377914'))
    print('id2mid: ' + id2mid('LgUW8DlCG'))

三、总结

这个工具本身比较简单,至于具体需要怎么使用,大家根据自身情况灵活选择就好。

祝大家变的更强。


http://www.niftyadmin.cn/n/4411675.html

相关文章

【刷题】589. N 叉树的前序遍历

题目地址 点击跳转 题目描述 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示&#xff0c;每组子节点由空值 null 分隔&#xff08;请参见示例&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root…

【刷题】NC337 IP地址转化

题目地址 点击跳转 题目描述 IP地址是一个用 ‘.’ 隔开的四段数字&#xff0c;每段的大小是 0 ≤ n ≤ 255 。请你把 IP 地址转换成一个整数。(IPv4) 例如&#xff0c; 114.55.207.244 的二进制表示是 01110010 00110111 11001111 11110100 &#xff0c;其十进制表示是 759…

Struts生成Word下载

比较巧的是&#xff0c;刚做完一个下载Excel文件的功能&#xff0c;又有一个新的问题&#xff0c;就是需要将一份文件导出到word中&#xff0c;刚开始我找到的方法&#xff0c;无非是将网页中内容用wrod打开&#xff0c;但是网页的版式也复制了进去&#xff0c;显的很不正规。相…

Oracle 9i Enterprise Manager Console 无法启动的解决方法

前几天心血来潮重新拾起它。于是隔壁同学那借来三张oracle 9i的盘。安装过程一切顺利。接着兴冲冲打开Enterprise Manager Console&#xff0c;发现窗口在屏幕上闪了下就没了&#xff0c;启动不起来&#xff01;我试着又去启动SQLPlus Worksheet发现情况也是一样的。~~~超级郁闷…

oracle trigger代码

sql 代码--[6]// Oracle Trigger --实例1------------------------ --创建触发器&#xff0c;当用户对test表执行DML语句时&#xff0c;将相关信息记录到日志表 --创建测试表 CREATE TABLE test ( t_id NUMBER(4), t_name VARCHAR2(20), t_age NUMBER(2), t_sex CHAR ); --创建…

在java程序中执行dos命令或运行其他程序

在java程序中执行dos命令或运行其他程序 程序如下&#xff1a; package com.jany.runother; import java.io.BufferedReader;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.PrintWriter; public class RunOther{ /** * param …

NetBeans 编辑 C/C++ Cygwin

安装 Cygwin 配合 NetBeans 编辑 C/C在 NetBeans 中&#xff0c;我们要编辑 C/C 除了要安装 Plugin 外&#xff0c;还要安装 C/C Compiler。 下方的例子是使用 Cygwin 和 NetBeans 来达成我们的需求&#xff1a; 首先&#xff0c;当然是安装 Cygwin ( Windows 平台上的一种 U…