从客户端取到浏览器返回的oauth凭证

这个随便记录一下,也是朋友问我的一个问题。 在网上找了下,没找到相关的,用英文也搜索了一下,可能我的关键词没找对,找了一会没找到。 想到以前用过的rclone也是用的这样的方式,去看了下相关部分源码。 解决方案是本地搭建一个 webserver 用来获取凭证,然后客户端就能拿到了。

四月 26, 2019 · 1 分钟 · 

打造一个壁纸爬虫来爬你的老婆

好久没写东西了,随便水一篇文,也是比较简单的东西 可能每个喜欢二次元的人都有自己的老婆或者老公吧,之前在朋友那里看到了一个壁纸网站wall.alphacoders.com,要是我想要亚丝娜的壁纸,只需要搜索她的英文名Asuna即可看到一千多张有关亚丝娜的壁纸。壁纸收集爱好者肯定就和我一样想把它们给下载到自己的电脑上幻灯片当作壁纸了,当然手工下载是不可能的,必须写下爬虫,分析下壁纸下载流程。 请求分析 首先我们F12打开开发者工具,在一张图上找到下载 我们在开发者工具里面取元素,并没有看到下载链接,说明下载链接并没有包含在原始html中,但是点击是可以下载的,并且可以看到整个页面并没有进行刷新,判断是一个ajax请求,直接点进XHR,然后再次点击下载链接可以看到请求。 可以看到这个请求返回了一个链接,我们直接访问链接,发现是可以下载的,说明这就是下载链接了,那么这个链接是怎么来的呢? 我们看看请求,这个post请求里面有一些参数,我们先不去考虑这些参数怎么来的,我们先模拟一下请求看看请求Header里面有没有什么东西是必须的,这里直接上postman或者curl都可以,如果你的机器上面安装了curl我推荐用这个,因为Chrome开发者工具,直接可以在请求上右键Copy as cURL,直接可以帮你复制出curl命令,我这里复制出来是这样的 1 curl "https://wall.alphacoders.com/get_download_link.php" -H "Pragma: no-cache" -H "Origin: https://wall.alphacoders.com" -H "Accept-Encoding: gzip, deflate, br" -H "Accept-Language: zh-CN,zh;q=0.9" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36" -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -H "Accept: */*" -H "Cache-Control: no-cache" -H "X-Requested-With: XMLHttpRequest" -H "Cookie: __cfduid=d7ec945393d1b5ef3c28d4c9d12ef9fb11552315444; cookieconsent_status=allow; wa_session=1eogv8ehgn3itq5g4g8hfsducpkm9lbu46q893vrkhph3ued4rm89gvk7ck4fdg9k73cmrcdesoqj4crm1575vj3lfid9e67fpis661" -H "Connection: keep-alive" -H "Referer: https://wall.alphacoders.com/search.php?search=Asuna" --data "wallpaper_id=533007^&type=png^&server=images8^&user_id=79150" --compressed 我们先去掉不必要的东西 curl "https://wall.alphacoders.com/get_download_link.php" --data "wallpaper_id=533007&type=png&server=images8&user_id=79150" ,直接执行,发现可以获取到地址,所以现在要考虑的只有这些参数是怎么来的了,下面我同样放一张postman的图,可以看到是同样的可以获取到下载链接 这些参数我们从两方面考虑,一是用js算出来的,一个就是在html中存在的。 我们首先在html里找找看有没有。 通过关键字搜索页面html,我们可以找到每一张图都有一串类似于下面的属性 1 data-id="533007" data-type="png" data-server="images8" data-user-id="79150" 和上面的post参数是一一对应的。 ...

三月 13, 2019 · 3 分钟 · 

教程视频如何压制体积更小

录制完了教程视频,如何压制会在不影响观看的情况下,使得到的视频体积较小呢? ...

十一月 7, 2018 · 1 分钟 · 

windows中的软链接硬链接等

学校嘛,有些时候还是得逆逆上网客户端啥的,并且学校的不少工作,这Windows的需求还是挺强的,之前Win10的体验并不是太好,不过时隔这么久,打算从7升级到10了,恰好系统也该换了。 首先是命令行的关注,在家里使用了太久的marjaro,逐渐转为开发,以前对windows的命令行不关注也变为关注了,PowerShell安装了scoop,可以一键安装不少工具了,但是有一个痛点就是,以前对用户目录不关注,但是linux用久了反而觉得用户目录好用挖,我想在在命令行下切到我快捷方式指向的目录,但是是不行的,然后了解了一下这方面,就像是linux下的软链接硬链接一样。 使用PowerShell 软链接 1 New-Item -ItemType SymbolicLink -Path C:\\image -Target C:\\source.txt 硬链接 1 New-Item -ItemType HardLink -Path C:\\image.txt -Target C:\\source.txt Junction windows中文件与文件夹是完全不同的两种类型,创建文件夹链接不可以使用 HardLink ,但是可以使用 Junction 1 New-Item -ItemType Junction -Path C:\\test\_image -Target C:\\test\_source 虽然powershell可以建立,但是命令还是很繁琐,cmd下有个工具mklink 使用CMD cmd下有个好用的工具mklink 1 2 3 4 5 6 7 8 9 C:\\>mklink 创建符号链接。 MKLINK \[\[/D\] | \[/H\] |\[/J\]\] Link Target /D 创建目录符号链接。默认为文件符号链接。 /H 创建硬链接而非符号链接。 /J 创建目录链接。 Link 指定新的符号链接名称。 Target 指定新链接引用的路径(绝对或相对)。 软链接和硬链接的区别 其实这部分和linux中的是差不多的 ...

九月 21, 2018 · 1 分钟 · 

拉勾抓职位简单小爬虫

花了十来分钟写了个这个小爬虫,目的就是想能够方便一点寻找职位,并且大四了,没有工作和实习很慌啊! 爬虫不具有扩展性,自己随手写的,改掉里面的 keyword 和 region 即可爬行所有的招聘,刚开始测试的是5s访问一次,不过还是会被ban,所以改成了20s一次,没有使用多线程和代理池,懒,够用就行了,结果会保存到一个csv文件里面,用excel打开即可。 直接上代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 import requests import urllib.parse import json import time import csv def main(): keyword = '逆向' region = '全国' headers = { 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive', 'Content-Length': '37', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Host': 'www.lagou.com', 'Origin': 'https://www.lagou.com', 'Pragma': 'no-cache', 'Referer': 'https://www.lagou.com/jobs/list_%s?city=%s' % (urllib.parse.quote(keyword), urllib.parse.quote(region)), 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36', 'X-Anit-Forge-Code': '0', 'X-Anit-Forge-Token': 'None', 'X-Requested-With': 'XMLHttpRequest', } data = { 'pn': 1, 'kd': keyword, } total_count = 1 pn = 1 jobjson = [] while 1: if total_count <= 0: break data['pn'] = pn lagou_reverse_search = requests.post("https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false", headers=headers, data=data) datajson = json.loads(lagou_reverse_search.text) print('page %d get finish' % pn) if pn == 1: total_count = int(datajson['content']['positionResult']['totalCount']) jobjson += [{'positionName': j['positionName'], 'salary': j['salary'], 'workYear': j['workYear'], 'education': j['education'], 'city': j['city'], 'industryField': j['industryField'], 'companyShortName': j['companyShortName'], 'financeStage': j['financeStage']} for j in datajson['content']['positionResult']['result']] total_count -= 15 pn += 1 time.sleep(20) csv_header = ['positionName', 'salary', 'workYear', 'education', 'city', 'industryField', 'companyShortName', 'financeStage'] with open('job.csv','w') as f: f_csv = csv.DictWriter(f, csv_header) f_csv.writeheader() f_csv.writerows(jobjson) if __name__ == '__main__': main() ajax动态加载的,直接打开调试工具看XHR即可。 ...

九月 11, 2018 · 2 分钟 ·