抖音用户信息爬取案例 𰇁

原文:
http://blog.gqylpy.com/gqy/416

置顶:来自一名75后老程序员的武林秘籍——必读(博主推荐)



来,先呈上武林秘籍链接:http://blog.gqylpy.com/gqy/401/

你好,我是一名极客!一个 75 后的老工程师!

我将花两分钟,表述清楚我让你读这段文字的目的!

如果你看过武侠小说,你可以把这个经历理解为,你失足落入一个山洞遇到了一位垂暮的老者!而这位老者打算传你一套武功秘籍!

没错,我就是这个老者!

干研发 20 多年了!我也年轻过,奋斗过!我会画原理图,会画 PCB,会模拟,会数字!玩过 PLC,玩过单片机,会用汇编,会用 C!玩过 ARM,比如
PLC,STM32,和时下正在起飞的 NXP RT1052!搞过 DSP,比如 TMS320F28335!搞过 FPGA,不管 Xilinx 还是 Altera,也不管是 Verilog 还是
VHDL,或者直接画数字电路图!我懂嵌入式系统,比如 uCOS 和 Linux!我懂开源的硬件,比如 Arduino
和树莓派!我也搞软件,学了一堆上位机的语言C#,JAVA,Python,Kotlin,Swift!会写爬虫工具,又自学写APP,不管Android 还是 IOS!

可是这一切有什么用呢?土鸡瓦狗!不值一提!干技术的永远就是最苦逼的那个人!

我相信看到这里的你,应该是个 IT
圈的人!或许是个学生,在学习某个技能!或者是个初入职场的年轻人,在啃某个技术!或者是个工程师,被项目困住,想找个资料快速突破阻碍!反正不管怎么样,你们都不会是泛泛之辈,不可能轻易交出智商税!

所以我把这份资料放进我的收费资源里,以证明接下去我要跟你讲的这本武功秘籍是可以真真实实的帮你赚到钱的!

我不知道叫它什么好,我把它写的像武林秘籍!所以我姑且叫它《武林秘籍》或者叫《赚钱秘籍》!

《武林秘籍》里封装了一个本人近期创造的一个可以一劳永逸的赚钱方法!你可以理解为躺着赚钱,或者挂机赚钱!请你放心,不是让你去违法!

我是一个IT男,从来不忽悠别人,这是我做人的原则。若此举能帮助你付起房子首付与月供,减轻一些目前高房价的压力,何乐而不为呢!

我提取里边几个要点:

  1. 将你手里有的资源按照说明书一步一步完成所有动作就可以躺着赚钱。
  2. 你不可能不劳而获,但是用这个方法确实是可以一劳永逸!
  3. 我用业余时间操作这个项目三个月,现在每天稳定收入300+。
  4. 里边会告诉你哪些是资源,怎么源源不断的获取资源。
  5. 里边会告诉你怎么获取爆炸的流量。
  6. 里边会告诉你很多黑技能(不是干坏事)。
  7. 总之,里边字字如金,有些东西我不告诉你可能这辈子都不会知道!

交了这波智商税,你的能力会爆涨,我说的不是你的专业能力,而是在这个社会生存的基础能力!

以上所有的东西可以规为武功的招式,但如果你想短期就实现目标,我还在说明书的最后留下了一些现成资源的下载链接,包括一些稀缺的资源,保证物有所值。这部分内容可以规为内功,继不继承由你自已决定!

好了,最后跟所有的老者不一样的是:这个老人要问你收取一点点小费,才会把无比珍贵的秘籍交到你手中!

以下是付款链接,付款后你将获取《武林秘籍》的访问密码。随后你将解锁另外一个谋生技能,在工作挣着死工资的同时,该技能也能同时帮你赚另一份钱,终身受用!

http://www.gqylpy.com/get_wlmj_pwd

能在此遇见是我们的缘分,我愿意帮助你,祝你取得成功!

传说中的武林秘籍:http://blog.gqylpy.com/gqy/401/

抓包。抓到了一个share_url

我访问过去看了下,

https://www.iesdouyin.com/share/user/102064772608

有数据的。那就拿数据。

然后发现它的数字做了字符集映射。

搞他。

下载.ttf的文件,s3a.bytecdn.cn/ies/resource/falcon/douyin_falcon/static/font/iconfont_da2e2ef.ttf,这个便用font creator软件打开,看到这个图片我们就明白了字体与数字的关系

既然我们看到num_对应数字1,num_8对应数字7,那这个num_8们怎么得到,与‘ ’有啥关系?

2.这个时候,需要大家安装pip install fontTools,使用fontTool打开ttf文件转化成xml文件,

采用下面代码

from fontTools.ttLib import TTFont
font_1 = TTFont(‘douyin.ttf‘)
font_1.saveXML(‘font_1.xml‘)

我们看到了font_1.xml,

这就能看出来了。

import re
def getDouyinNum(douIDNumCode):
    mapCode2Font = {
        ‘0xe602‘: ‘num_‘,
        ‘0xe603‘: ‘num_1‘,
        ‘0xe604‘: ‘num_2‘,
        ‘0xe605‘: ‘num_3‘,
        ‘0xe606‘: ‘num_4‘,
        ‘0xe607‘: ‘num_5‘,
        ‘0xe608‘: ‘num_6‘,
        ‘0xe609‘: ‘num_7‘,
        ‘0xe60a‘: ‘num_8‘,
        ‘0xe60b‘: ‘num_9‘,
        ‘0xe60c‘: ‘num_4‘,
        ‘0xe60d‘: ‘num_1‘,
        ‘0xe60e‘: ‘num_‘,
        ‘0xe60f‘: ‘num_5‘,
        ‘0xe610‘: ‘num_3‘,
        ‘0xe611‘: ‘num_2‘,
        ‘0xe612‘: ‘num_6‘,
        ‘0xe613‘: ‘num_8‘,
        ‘0xe614‘: ‘num_9‘,
        ‘0xe615‘: ‘num_7‘,
        ‘0xe616‘: ‘num_1‘,
        ‘0xe617‘: ‘num_3‘,
        ‘0xe618‘: ‘num_‘,
        ‘0xe619‘: ‘num_4‘,
        ‘0xe61a‘: ‘num_2‘,
        ‘0xe61b‘: ‘num_5‘,
        ‘0xe61c‘: ‘num_8‘,
        ‘0xe61d‘: ‘num_9‘,
        ‘0xe61e‘: ‘num_7‘,
        ‘0xe61f‘: ‘num_6‘,
    }
    mapFont2Num = {
        ‘num_‘: 1,
        ‘num_1‘: 0,
        ‘num_2‘: 3,
        ‘num_3‘: 2,
        ‘num_4‘: 4,
        ‘num_5‘: 5,
        ‘num_6‘: 6,
        ‘num_7‘: 9,
        ‘num_8‘: 7,
        ‘num_9‘: 8,
    }
    douIDNum = ‘‘
    map1 = {}
    if douIDNumCode == ‘‘:
        return ‘‘
    for i in douIDNumCode:
        j = i.replace(‘ &#‘, ‘0‘).replace(‘; ‘, ‘‘)
        map1[j] = str(mapFont2Num[mapCode2Font[j]])
    return map1

def req(share_id):
    url2= ‘https://www.iesdouyin.com/share/user/{}‘.format(share_id)
    headers ={
        "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) "
                     "AppleWebKit/537.36 (KHTML, like Gecko) "
                     "Chrome/74.0.3729.169 Safari/537.36"
            }
    res=requests.get(url2,verify=False,headers=headers)
    return res

def parse(res):
    description_header = re.findall(‘抖音ID:     (.*?)   </p>‘,res.text,re.S)
    description_back = re.findall(‘<i class="icon iconfont ">(.*?)</i>‘,res.text,re.S)
    mapDict = getDouyinNum(douIDNumCode=description_back)
    res = description_header[0]
    for i,j in mapDict.items():
        res = res.replace(‘<i class="icon iconfont "> &#‘+i[1:]+‘; </i>‘,j)
    print(res)

if __name__ == ‘__main__‘:
    res =  req(102064772608)
    parse(res)

2019年8月更新(完整版):

检测到最近很多同学都在看这篇文章,我就重新写了一遍,思路还是跟上面一样,这次获取的是所有的用户信息。

如果有用,还请点赞或者留言 ??

import re
import requests
from lxml import etree
‘‘‘
                         抖音用户基本信息 -> 请求share来获取数据
‘‘‘

def handle_decode(input_data):
    # 匹配icon font
    regex_list = [
        {‘name‘: [‘  ‘, ‘  ‘, ‘  ‘], ‘value‘: 0},
        {‘name‘: [‘  ‘, ‘  ‘, ‘  ‘], ‘value‘: 1},
        {‘name‘: [‘  ‘, ‘  ‘, ‘  ‘], ‘value‘: 2},
        {‘name‘: [‘  ‘, ‘  ‘, ‘  ‘], ‘value‘: 3},
        {‘name‘: [‘  ‘, ‘  ‘, ‘  ‘], ‘value‘: 4},
        {‘name‘: [‘  ‘, ‘  ‘, ‘  ‘], ‘value‘: 5},
        {‘name‘: [‘  ‘, ‘  ‘, ‘  ‘], ‘value‘: 6},
        {‘name‘: [‘  ‘, ‘  ‘, ‘  ‘], ‘value‘: 7},
        {‘name‘: [‘  ‘, ‘  ‘, ‘  ‘], ‘value‘: 8},
        {‘name‘: [‘  ‘, ‘  ‘, ‘  ‘], ‘value‘: 9},
    ]

    for i1 in regex_list:
        for i2 in i1[‘name‘]:
            input_data = re.sub(i2, str(i1[‘value‘]), input_data)       # 把正确value替换到自定义字体上

    html = etree.HTML(input_data)
    douyin_info = {}
    # 获取昵称
    douyin_info[‘nick_name‘] = html.xpath("//div[@class=‘personal-card‘]/div[@class=‘info1‘]//p[@class=‘nickname‘]/text()")[0]
    # 获取抖音ID
    douyin_id = ‘‘.join(html.xpath("//div[@class=‘personal-card‘]/div[@class=‘info1‘]/p[@class=‘shortid‘]/i/text()"))
    douyin_info[‘douyin_id‘] = douyin_id
    # douyin_info[‘douyin_id‘] = re.sub(search_douyin_str, ‘‘, html.xpath("//div[@class=‘personal-card‘]/div[@class=‘info1‘]//p[@class=‘nickname‘]/text()")[0]).strip() + douyin_id
    # 职位类型
    try:
        douyin_info[‘job‘] = html.xpath("//div[@class=‘personal-card‘]/div[@class=‘info2‘]/div[@class=‘verify-info‘]/span[@class=‘info‘]/text()")[0].strip()
    except:
        pass
    # 描述
    douyin_info[‘describe‘] = html.xpath("//div[@class=‘personal-card‘]/div[@class=‘info2‘]/p[@class=‘signature‘]/text()")[0].replace(‘\n‘, ‘,‘)
    # 关注
    douyin_info[‘follow_count‘] = html.xpath("//div[@class=‘personal-card‘]/div[@class=‘info2‘]/p[@class=‘follow-info‘]//span[@class=‘focus block‘]//i[@class=‘icon iconfont follow-num‘]/text()")[0].strip()
    # 粉丝
    fans_value = ‘‘.join(html.xpath("//div[@class=‘personal-card‘]/div[@class=‘info2‘]/p[@class=‘follow-info‘]//span[@class=‘follower block‘]//i[@class=‘icon iconfont follow-num‘]/text()"))
    unit = html.xpath("//div[@class=‘personal-card‘]/div[@class=‘info2‘]/p[@class=‘follow-info‘]//span[@class=‘follower block‘]/span[@class=‘num‘]/text()")
    if unit[-1].strip() == ‘w‘:
        douyin_info[‘fans‘] = str(float(fans_value) / 10) + ‘w‘
    else:
        douyin_info[‘fans‘] = fans_value
    # 点赞
    like = ‘‘.join(html.xpath("//div[@class=‘personal-card‘]/div[@class=‘info2‘]/p[@class=‘follow-info‘]//span[@class=‘liked-num block‘]//i[@class=‘icon iconfont follow-num‘]/text()"))
    unit = html.xpath("//div[@class=‘personal-card‘]/div[@class=‘info2‘]/p[@class=‘follow-info‘]//span[@class=‘liked-num block‘]/span[@class=‘num‘]/text()")
    if unit[-1].strip() == ‘w‘:
        douyin_info[‘like‘] = str(float(like) / 10) + ‘w‘
    else:
        douyin_info[‘like‘] = like

    return douyin_info

def handle_douyin_info(url):
    header = {
        ‘user-agent‘: ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36‘
    }
    response = requests.get(url=url, headers=header)
    return handle_decode(response.text)

if __name__ == ‘__main__‘:
    url = ‘https://www.iesdouyin.com/share/user/102064772608‘
    print(handle_douyin_info(url))

原文:
http://blog.gqylpy.com/gqy/416

原文地址:https://www.cnblogs.com/mypath1/p/11406272.html

时间: 2024-10-09 05:38:17

抖音用户信息爬取案例 𰇁的相关文章

抖音分享页用户信息爬取

其实这个是有客户要求做的,但我完成的不够完美.过来分享出来好了~ 首先,你知道抖音有一个用户分享页吧? 像这样的:https://www.douyin.com/share/user/58841646784 F12查看代码. ok,可以看到有数字的地方都做了字体反爬,比如抖音id上的数字啊,粉丝数这些. 那我们这样子,先把它的这个字体文件下载下来 在开发者工具中选择Network筛选font后刷新网页就能找到这个字体了,如下图: 然后复制链接到新窗口打开就能下载字体了. 这是我下到的字体 下一步就

python网络爬虫(14)博客园用户信息爬取

说明 这里只放代码,方案技术没有更变 代码说明 需要cookies绕过登录,使用selenium在Firefox下模拟.需要安装geck...?插件,另外,数据存储在sqlite,需要安装. Spider.py import HtmlDownloader import HtmlParser import DataOutput import UrlManager import re from selenium import webdriver class Spider(object): def _

最全的抖音数据信息获取

最近开发了一套抖音采集程序,目前提供如下接口. 1.抖音综合搜索数据信息接口 2.抖音视频搜索数据信息接口 3.抖音用户信息搜索数据信息接口 4.获取抖音首页推荐列表数据信息接口 5获取抖音对应城市的推荐列表数据信息接口 6.获取抖音用户信息数据信息接口 7.获取抖音用户作品(抖音用户视频)数据信息接口 8.获取抖音用户动态数据信息接口 9.获取抖音用户关注用户列表数据信息接口 注意:关注列表请求太频繁会导致不返回数据 10.获取抖音用户粉丝列表数据信息接口 11.获取抖音评论列表数据信息接口

python实现人人网用户数据爬取及简单分析

这是之前做的一个小项目.这几天刚好整理了一些相关资料,顺便就在这里做一个梳理啦~ 简单来说这个项目实现了,登录人人网并爬取用户数据.并对用户数据进行分析挖掘,终于效果例如以下:1.存储人人网用户数据(户主的全部好友.户主好友的全部好友.户主及好友关注的公共主页).2.信息可视化,绘制户主好友间的关系网络图:3.数据挖掘,通过分析户主好友关注的公共主页,向户主推荐公共主页. 项目分为三个部分,各自是人人网登录及用户数据爬取与存储.用户关系可视化.公共主页推荐.以下分别介绍这三个部分. 第一部分实现

链家信息爬取

一.数据库封装 import pymysql class MysqlHelper(object):    def __init__(self):        self.db = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='abc123', database='py1011', charset='utf8')        self.cursor = self.db.cursor() def execut

PHP爬虫:百万级别知乎用户数据爬取与分析

抓取了110万的用户数据,数据分析结果如下: 开发前的准备 安装Linux系统(Ubuntu14.04),在VMWare虚拟机下安装一个Ubuntu: 安装php5.6或以上版本: 安装MySQL5.5或以上版本: 安装curl.pcntl扩展. 使用PHP的curl扩展抓取页面数据 PHP的curl扩展是PHP支持的允许你与各种服务器使用各种类型的协议进行连接和通信的库. 本程序是抓取知乎的用户数据,要能访问用户个人页面,需要用户登录后的才能访问.当我们在浏览器的页面中点击一个用户头像链接进入

网站爬取-案例四:知乎抓取(COOKIE登录抓取个人中心)(第一卷)

有很多网站是需要先登录,才可以浏览的,所以我们这个案例主要讲解如何以登陆的方式抓取这类的页面 第一:http本身是一种无状态的协议 这样两个请求没有任何关系,像淘宝这样的网站需要记录用户的每次请求,来看看有状态的请求 看一下COOKIE本地存储 用户名密码可以存到本地,所以安全性不高,这样就出现了SESSION机制,根据用户名和密码生成SESSIONID,根据SESSIONID请求取出用户要的内容 登陆时产生,退出时清空 看下登陆时 三个字段为ID,加密字段,失效日期,看下登录后的控制台 说到这

爬虫系列之链家的信息爬取及数据分析

关于链家的数据爬取和分析 已经实现 1.房屋数据爬取并下载 2.房屋按区域分析 3.房屋按经纪人分析 4.前十经纪人 5.经纪人最有可能的位置分析 6.实现以地区划分房屋 目前存在的问题: 1.多线程下载的时候会出现个别文件不继续写入了(已经解决) 2.未考虑经纪人重名问题 3.查询中发现不是每次都能 get 到 url 的数据,具体原因可能跟header有关,或者网站反扒(已经解决,手机端的header有时候访问pc端会出现None的情况) 4.守护线程那里应该出问题了,如果有文件储存完成,其

【Python】博客信息爬取-微信消息自动发送

1.环境安装 python -m pip install --upgrade pip pip install bs4 pip install wxpy pip install lxml 2.博客爬取及发送 from bs4 import BeautifulSoup from threading import Timer import requests import traceback from wxpy import * url = '' nIndex = 6 my_groups = None