2020~2022工作笔记
Pycharm常用快捷键
ctrl + e 查看最近编辑文件
ctrl + shift + r 根据文件名查找文件
ctrl + h 全局搜索
ctrl + alt + o 优化导入包排序
ctrl + shift + o 开启翻译框
快捷键设置:
放大、缩小设置:File ->setting-> Keymap->搜索框中输入:Increase Font Size(双击选中)->弹出对话框时选择Add Mouse Shortcut(单击)
json、pickle、shelve 各自数据序列化方式的异同和用法json适用于不同类型的语言,支持的数据类型:int\str\list\tuple\dict主要是操作字符串dumps、loads操作 字符串dump、load 操作 文件 (pickle一样的情况)
123456789# dump入文件 with open('cxs.json','w') as f: json.dump(data,fp)json.dump(item, fp=open("zhihu ...
2022~2023工作笔记
0701657335e84f0c327f6bba26337f2a8d2ddfaa04a524a7a3f409fdb8f6089378eadb916c2a3e34bc5f74b21929862ecacf06575cac1a906d3d9fb862c480acbf065fa7ef3edbace837425efe4e0a8324a3f6dac879a6f0ce60803afab30a830cf4270742c621dedf8f093587d5bc0d08b7ea30857b214f55ad79848478e33d58a67e438c33c79890d2a5918b8a21ccd23baf5bfffc946a52e880db57f03798f670935127e0f4e9f3becd6f1cf8f9a47895f7a3dc919bbc9388bade17115f503cef597e4f328572f981668f2f9385526c2f855989c93fe7d0d73c5a80609248d63b73315d3117e050a1465ef795fb490e42049615ffa1a42 ...
爬虫工程师-常见面试题汇总
0701657335e84f0c327f6bba26337f2a8d2ddfaa04a524a7a3f409fdb8f60893ee4bdb865e642277372a90efd22249ddf538df9e3ee0e37ac7e9f5bff32d8144f64ae8850a4f920e9f09ad00f24d13c6e88cfbaf6ea30be02952f814e87090fb6c9a93458735871bec17da2a693728289cd88f5b403b457c8a8e399687a52533439ef9fd5cd8903c0b686f0df805ec72ae1d0c9972c54361dabf49199659625702ac4c19a6dd4347d33cff1b195fca76d94f1499b10fc28e6594fc047ab0f93f9de446462cea09e4b3a2df6cbfa6829efba082c2362c6d7daa035efd25126f51dd822de87650b24842a8f465bd79c06c88cdbafbc1dfc4d5a ...
web逆向-中国人民银行wzwschallenge参数.md
这里无法直接使用浏览器抓包,因为相同url的包会被覆盖掉,直接上 fiddler:你如果用requests直接去请求的话,就会看到上图那一大坨混淆过后的js代码,使用的是sojson.v6版本的混淆
分析一下正常的请求流程,第二个请求很关键,主要是构建正确的 wzwschallenge参数,然后拼接url,才能拿到返回的 set-cookie
网站使用的是 CWAP-WAF服务,随手百度了一下,是中国电子云的一个防火墙服务
那么 wzwschallenge从哪里来呢,看了一下,网站没有其他的js请求,那么肯定就是从开头那一大坨混淆后的js代码里生成的,混淆后的代码太难看了,用AST插件还原一波
定位到这里分析了一下,主要是和 _0x13698a、_0xcff1b8两个函数有关,两个函数代码量也不大,我就直接用python还原算法了,当然扣下来直接运行js代码也行
代码整理1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 ...
web逆向-看某网微信小程序加密分析
抓包分析目标是某招聘类小程序的面试经验数据:通过观察Fiddler 抓到的数据包,我们可以看到这款小程序对两个地方进行了加密,一个是请求参数 QueryString 里面的 b 和 kiv:一个是 Response 里面的文本数据:由于小程序没有像PC端那样有js文件渲染,所以推断是内部的wxapkg文件对数据进行的加解密,因此就需要反编译获取小程序的源码,再进行静态调试分析算法。
源码获取wxapkg文件的获取PC端微信的小程序包缓存路径,一般为 .\WeChat Files\Applet,里面每个 wx 开头的文件夹代表一个小程序,为了锁定目标的小程序,可以先清空 Applet 目录,然后打开小程序,找到目录下唯一的 wx 文件夹,主包 __APP__.wxapkg 就是我们要分析的对象了
反编译(参考链接)反编译前,使用UnpackMiniApp.exe对小程序包进行解密
如果提示安装 Framwork 3.5 失败,重启电脑即可
解密前,需要在根目录下创建好 wxpack 文件夹,不然会报错
接下来就是对解密后的包文件反编译了,cmd打开命令窗口, 进入到 wxappU ...
Python编程-html源码压缩
用爬虫抓下来的html源码,一般都有很多 换行符和空格,现在想实现一个效果,对这些空字符都去掉,也就是对源码做一个压缩
第一时间可能是想到用正则去掉:
new_txt = re.sub(r”>\s+<”, “><”, text)
这样做的坏处是,假如标签的纯文本中存在模式类似 “>\s+<” 的文本,原本的结构就被破坏了,因此最好不要用正则直接去修改 html源码,很容易造成误差
逛了一圈 stockflow,我找到一个方案,就是使用 lxml.etree遍历每个标签节点,对其中的 tail和text 做一个 strip操作,我封装成了一个函数:
12345678910from lxml import etree def remove_tag_space(html_text): tree = etree.HTML(html_text) for tag in tree.iter(): if tag.tail: tag.tail = tag.tail.strip() if tag.text: tag.text = tag.text.str ...
爬虫工程师-css选择器语法总结
HTML文本转DOM树的两种方式
使用lxml.etree1234from lxml import etree html = etree.HTML(html_text)html.xpath("//div[@class='tabslider']/ul")
使用scrapy团队开源的parsel库(推荐),Parsel官方文档12345678910111213141516171819202122from parsel import Selector # 构建DOM树,可解析html文本和xml文本html = Selector(text=html_text or xml_text) # 解析结果的获取和处理# 返回单个字符串html.xpath("...").get()html.xpath("...").extract_first() # 返回结果列表html.xpath("...").getall()html.xpath("...").extract() # 获取节 ...
Python编程技巧(一)
方便一些包的导入1234# 把当前目录、父目录、父父目录引入系统sys.path.append(os.path.abspath("../..")) sys.path.append(os.path.abspath(".."))sys.path.append(os.path.abspath("."))
字符填充12345678In [1]: "cxs".ljust(16, "0")Out[1]: 'cxs0000000000000'In [2]: "cxs".center(16, "0")Out[2]: '000000cxs0000000'In [3]: "cxs".rjust(16, "0")Out[3]: '0000000000000cxs'
tuple拆包1234t = ('cxs',16,2,3)name, *n ...
Python编程-内置函数strip踩坑
背景我们都知道 strip 是用来删除首尾字符串的,在做项目的时候发现很多的bug都是这函数的使用不当(理解不正确)造成的,因此有必要深入研究一下
比如:
12"abc2123".strip("123")Out[4]: 'abc'
本来是想去除尾部的 123 ,期望获取到的结果是 abc2 ,结果把最末尾的 2 也去除了
原理为什么会这样呢?我们来看看官方的解释:链接
最外侧的前导和末尾 chars 参数值将从字符串中移除。 开头端的字符的移除将在遇到一个未包含于 chars 所指定字符集的字符时停止。 类似的操作也将在结尾端发生。
结合上面的例子,翻译成人话就是,开头或结尾的每个字符,只要出现在 ‘123’ 这个列表中,就会剔除,并不是说匹配 123 这个整体,然后再剔除(这是很多人的误区),后面还说,只要遇到某个字符不包含在 123 里面,就会停止剔除操作,比如下面这个例子:
12"ab1c123".strip("123")Out[3]: 'ab1c' ...
Python编程-urllib.parse的用法
urllib.parse 在爬虫开发过程中使用地频率非常高,这里总结了一些常用用法
urlparse(url解析)123456In [16]: from urllib.parse import urlparseIn [17]: u = urlparse(url)In [18]: uOut[18]: ParseResult(scheme='http', netloc='example.com', path='/cxs', params='', query='name=cxs', fragment='age')
补充一下 query 和 params 的区别:
query方式生成的url为 /xx?id=id,params方式生成的url为 xx/id
当path不为空时只能使用query方式
parse_qs(query解析)123456In [19]: from urllib.parse import parse_qsIn [20]: query= ...