原文:
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男,从来不忽悠别人,这是我做人的原则。若此举能帮助你付起房子首付与月供,减轻一些目前高房价的压力,何乐而不为呢!
我提取里边几个要点:
- 将你手里有的资源按照说明书一步一步完成所有动作就可以躺着赚钱。
- 你不可能不劳而获,但是用这个方法确实是可以一劳永逸!
- 我用业余时间操作这个项目三个月,现在每天稳定收入300+。
- 里边会告诉你哪些是资源,怎么源源不断的获取资源。
- 里边会告诉你怎么获取爆炸的流量。
- 里边会告诉你很多黑技能(不是干坏事)。
- 总之,里边字字如金,有些东西我不告诉你可能这辈子都不会知道!
交了这波智商税,你的能力会爆涨,我说的不是你的专业能力,而是在这个社会生存的基础能力!
以上所有的东西可以规为武功的招式,但如果你想短期就实现目标,我还在说明书的最后留下了一些现成资源的下载链接,包括一些稀缺的资源,保证物有所值。这部分内容可以规为内功,继不继承由你自已决定!
好了,最后跟所有的老者不一样的是:这个老人要问你收取一点点小费,才会把无比珍贵的秘籍交到你手中!
以下是付款链接,付款后你将获取《武林秘籍》的访问密码。随后你将解锁另外一个谋生技能,在工作挣着死工资的同时,该技能也能同时帮你赚另一份钱,终身受用!
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