Skip to content

Commit b24a9f4

Browse files
committed
fix markdown warning
1 parent a9d0ad8 commit b24a9f4

File tree

8 files changed

+161
-86
lines changed

8 files changed

+161
-86
lines changed

geetest_online/README.md

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,33 @@
11
### GeeTest滑块验证码online模式的破解
2-
继续以[国家企业信用信息公示系统](http://www.gsxt.gov.cn)为例。补充一个完成度80%的项目和文档。代码实现主要参考[https://zhuanlan.zhihu.com/windev](https://zhuanlan.zhihu.com/windev)的相关分析文章。
3-
已实现以下功能:
2+
3+
继续以[国家企业信用信息公示系统](http://www.gsxt.gov.cn)为例。补充一个完成度80%的项目和文档。代码实现主要参考[https://zhuanlan.zhihu.com/windev](https://zhuanlan.zhihu.com/windev)的相关分析文章。
4+
5+
### 已实现功能
46

57
#### 1. 所有HTTP Request & Response协议
6-
使用`requests`库实现。
8+
9+
使用`requests`库。
710

811
#### 2. 验证码图片的拼图重组和识别
12+
913
使用`Pillow`库,实现滑块拼图位置的精确定位。
10-
全局变量`IMAGE_DEBUG`,实现不同精准度的图片本地临时文件存储,以便观察定位效果和改进。
14+
全局变量`IMAGE_DEBUG`,实现不同精准度的图片本地临时文件存储,以便观察定位效果和改进。
1115

1216
#### 3. GeeTest Javascript 加解密算法破解
17+
1318
使用`PyExecJS`库,执行GeeTest Javascript方法,获得正确的明文和密文。
14-
配合`NodeJS`使用更佳。
19+
配合`NodeJS`使用更佳。
1520

1621
#### 4. 使用`BeautifulSoup4`库,进行网页数据解析
1722

18-
#### 未完成的20%包括2部分。
23+
### 未完成的20%
24+
1925
+ 完善用户鼠标轨迹运行的数据仿真算法。
20-
+ 补全官网针对爬虫返回HTTP 521的处理,补全Cookie校验逻辑。
26+
+ 补全官网针对爬虫返回 HTTP 521 的处理,补全Cookie校验逻辑。
2127

22-
#### 源码见GitHub
23-
https://github.com/9468305/python-script/tree/master/geetest_online
28+
### Python Dependence
2429

25-
#### Dependence
26-
```
30+
```bash
2731
pip install requests
2832
pip install Pillow
2933
pip install PyExecJS

gitstats/README.md

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,42 @@
1-
Python实现的一个小工具,用于分析Git commit log,获得Git Project每个成员的简单行为数据。
1+
Python实现的一个小工具,用于分析Git commit log,获得Git Project每个成员的简单行为数据。
2+
23
**Warning:代码量不能代表程序员能力水平!**
34

45
### 启动参数
6+
57
共5个。
8+
69
+ Repo地址
710
+ Commit 起始日期
811
+ Commit 结束日期
912
+ Git仓库子目录
1013
+ 统计分析结果CSV文件目标路径
1114

1215
### exec_git
13-
Git Log命令:
16+
17+
Git Log命令:
18+
1419
> git -C {} log --since={} --until={} --pretty=tformat:%ae --shortstat --no-merges -- {} > {}
1520
16-
填入参数,调用系统命令'os.system()',输出结果至本地临时文件。读取至内存,简单的String Array。
21+
填入参数,调用系统命令 `os.system()`,输出结果至本地临时文件。读取至内存,简单的String Array。
1722

1823
### parse
24+
1925
Git Log输出有3种格式,对应3种正则表达式。
26+
2027
```Python
2128
REPATTERN_FULL = r"\s(\d+)\D+(\d+)\D+(\d+)\D+\n"
2229
REPATTERN_INSERT_ONLY = r"\s(\d+)\D+(\d+)\sinsertion\D+\n"
2330
REPATTERN_DELETE_ONLY = r"\s(\d+)\D+(\d+)\sdeletion\D+\n"
2431
```
25-
遍历得到的数据,首先构造一个以Author为Key,分析结果为Value的字典。
26-
分析结果构造一个元祖,包括:
32+
33+
遍历得到的数据,首先构造一个以Author为Key,分析结果为Value的字典。分析结果构造一个元祖,包括:
34+
2735
+ Commit 次数
2836
+ 增加代码行数
2937
+ 删除代码行数
3038
+ 变更代码行数
3139

3240
### save_csv
33-
简单省略。
3441

35-
### 源码见GitHub
36-
https://github.com/9468305/python-script/tree/master/gitstats
42+
简单省略。

gsxt_mobile/README.md

Lines changed: 37 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,42 @@
11
[国家企业信用信息公示系统](http://www.gsxt.gov.cn)使用GeeTest滑块验证码。主站使用online验证模式,难破解。部分分站使用offline验证模式,易破解但多次HTTP请求应答往复,查询效率低。
22
[国家工商总局](http://www.saic.gov.cn/)提供了Android,iOS App,这次就来尝试分析一下App的情况。
3-
总局网站有2套:
4-
新版 http://www.saic.gov.cn/
5-
旧版 http://old.saic.gov.cn/
6-
于是App下载说明页面也有2套:
7-
新版 http://gzhd.saic.gov.cn/gszj/index/telephone/android2.html
8-
旧版 http://gzhd.saic.gov.cn/gszj/index/telephone/android.html
9-
**威武**
10-
还好App只有1套。
11-
国家工商行政管理总局移动版客户端:
12-
Android版 http://gzhd.saic.gov.cn/gszj/saicwap.apk
13-
iOS版 https://itunes.apple.com/cn/app/gong-shang-zong-ju/id725956822?mt=8
14-
国家企业信用信息公示系统:
15-
Android版 http://gzhd.saic.gov.cn/gszj/gongshi.apk
16-
iOS版 https://itunes.apple.com/cn/app/%E5%9B%BD%E5%AE%B6%E4%BC%81%E4%B8%9A%E4%BF%A1%E7%94%A8%E4%BF%A1%E6%81%AF%E5%85%AC%E7%A4%BA%E7%B3%BB%E7%BB%9F/id1048375712?mt=8
3+
4+
总局网站有2套:
5+
6+
+ 新版 http://www.saic.gov.cn/
7+
+ 旧版 http://old.saic.gov.cn/
8+
9+
于是App下载说明页面也有2套:
10+
11+
+ 新版 http://gzhd.saic.gov.cn/gszj/index/telephone/android2.html
12+
+ 旧版 http://gzhd.saic.gov.cn/gszj/index/telephone/android.html
13+
14+
还好App只有1套。
15+
16+
国家工商行政管理总局移动版客户端:
17+
18+
+ Android版 http://gzhd.saic.gov.cn/gszj/saicwap.apk
19+
+ iOS版 https://itunes.apple.com/cn/app/gong-shang-zong-ju/id725956822?mt=8
20+
21+
国家企业信用信息公示系统:
22+
23+
+ Android版 http://gzhd.saic.gov.cn/gszj/gongshi.apk
24+
+ iOS版 https://itunes.apple.com/cn/app/%E5%9B%BD%E5%AE%B6%E4%BC%81%E4%B8%9A%E4%BF%A1%E7%94%A8%E4%BF%A1%E6%81%AF%E5%85%AC%E7%A4%BA%E7%B3%BB%E7%BB%9F/id1048375712?mt=8
1725

1826
### 分析
27+
1928
**saicwap.apk,看这个名称,好像已经明白了什么。**
2029
安装&运行&解包查看`国家企业信用信息公示系统Android APK`文件。
2130
UI交互体验基本上就是一个网页。
2231
dex很小,assets文件很多。
2332
根据名称搜索加猜测,直接得出结论,WebView外壳,JQuery+AJAX实现网页。
2433
使用Fiddler抓包,仅有一条简单的HTTP Request & Response。
2534
Response是标准JSON文本。
26-
27-
随手写个实现
28-
### 填写Android Mobile HTTP Header参数。
35+
36+
随手写个实现
37+
38+
### 填写Android Mobile HTTP Header参数
39+
2940
```Python
3041
URL = 'http://yd.gsxt.gov.cn/QuerySummary'
3142
MOBILE_ACTION = 'entSearch'
@@ -40,7 +51,9 @@ XRW = 'com.zongjucredit'
4051
ORIGIN = 'file://'
4152
CHARSET = 'application/x-www-form-urlencoded; charset=UTF-8'
4253
```
43-
### 使用requests库。
54+
55+
### 使用requests库
56+
4457
```Python
4558
def query(keyword):
4659
_data = [('mobileAction', MOBILE_ACTION),
@@ -62,9 +75,11 @@ def query(keyword):
6275
_content = _response.json()
6376
print(json.dumps(_content, indent=2, sort_keys=True, ensure_ascii=False))
6477
```
65-
### 测试运行
66-
搜索关键字`腾讯科技`,得到[50条数据](https://github.com/9468305/python-script/blob/master/gsxt_mobile/%E8%85%BE%E8%AE%AF%E7%A7%91%E6%8A%8050.txt)
67-
格式示例:
78+
79+
### 测试运行
80+
81+
搜索关键字`腾讯科技`,得到[50条数据](https://github.com/9468305/python-script/blob/master/gsxt_mobile/%E8%85%BE%E8%AE%AF%E7%A7%91%E6%8A%8050.txt)。格式示例:
82+
6883
```JSON
6984
{
7085
"BUSEXCEPTCOUNT": "0",
@@ -81,9 +96,5 @@ def query(keyword):
8196
"UNISCID": "915101006771521538"
8297
}
8398
```
84-
85-
**实测,有时会封IP,24小时解禁,一旦封禁,爬虫和官方App一概屏蔽。**
86-
**威武+1。**
8799

88-
### 源码见GitHub
89-
https://github.com/9468305/python-script/tree/master/gsxt_mobile
100+
**实测,有时会封IP,24小时解禁,一旦封禁,爬虫和官方App一概屏蔽。**

lagou/README.md

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
关于拉勾网数据采集爬虫的文章,网上已经写烂了。这里简单记录一个之前帮助同事妹子写的小爬虫工具。
22
某天,HR同事妹子接到一个任务,收集并分析拉勾网BAT三家公司所有招聘岗位的分类,要求,薪酬范围,人数等信息。
3-
人肉采集辛苦枯燥,随手写段代码搭救妹子。
3+
人肉采集辛苦枯燥,随手写段代码搭救妹子。
4+
45
### 开始
5-
``拉勾网页面可能改版,以下代码实现可能已失效,不考虑持续维护更新。``
6+
7+
拉勾网页面可能改版,以下代码实现可能已失效,不考虑持续维护更新。
68
拉勾网给每家注册公司分配一个数字,URL形式是:
9+
710
```Python
811
LAGOU_URL = r'https://www.lagou.com/gongsi/j%d.html'
912
```
13+
1014
人肉筛选目标公司如下:
15+
1116
```Python
1217
COMPANY = {
1318
'腾讯': 451,
@@ -20,21 +25,27 @@ COMPANY = {
2025
'百度外卖': 104601
2126
}
2227
```
28+
2329
每家公司子页面的实现,使用了较多复杂Javascript代码和框架,因此不采用抓包分析HTTP协议的方案。
24-
简单粗暴直接的组合: Selenium + WebDriver + Chrome。
30+
简单粗暴直接的组合: Selenium + WebDriver + Chrome。
31+
2532
### Selenium
33+
2634
官网 http://www.seleniumhq.org/
2735
GitHub https://github.com/SeleniumHQ/selenium
2836
文档 http://selenium-python.readthedocs.io/
2937

3038
### ChromeDriver
39+
3140
[ChromeDriver - WebDriver for Chrome](https://sites.google.com/a/chromium.org/chromedriver/)
3241
为什么不使用运行效率更高的 [PhantomJS](http://phantomjs.org/)
3342
因为需要频繁调试代码和观察运行情况。稳定运行后可以随时修改一行代码参数,替换成 PhantomJS 。
3443
**Chrome 59 beta 开始支持 Headless。** 详见 [Getting Started with Headless Chrome](https://developers.google.com/web/updates/2017/04/headless-chrome)。所以以后应该也不再需要 PhantomJS 了。
3544

3645
### 数据定义
46+
3747
继续简单粗暴直接:(参数有点多,PyLint 报 Warning 了,无视吧。)
48+
3849
```Python
3950
class JobInfo(object):
4051
'''Job Info Object'''
@@ -64,11 +75,15 @@ class JobInfo(object):
6475
```
6576

6677
### 页面加载解析
78+
6779
WebDriver API 方便好用强大。
80+
6881
```Python
6982
con_list_item = WebDriverWait(browser, SLEEPTIME).until(lambda x: x.find_elements_by_class_name('con_list_item'))
7083
```
84+
7185
执行点击翻页跳转
86+
7287
```Python
7388
try:
7489
pages = browser.find_element_by_class_name('pages')
@@ -81,19 +96,21 @@ except NoSuchElementException as _e:
8196
print(_e)
8297
```
8398

84-
**数据采集完成后写入csv文件,略。**
99+
**数据采集完成后写入csv文件,略。**
100+
85101
###
102+
86103
WebDriver API 简单易用,但超时处理机制仍不完善。
104+
87105
```Python
88106
browser = webdriver.Chrome()
89107
browser.get(url)
90108
browser.refresh()
91109
browser.quit()
92110
```
93-
`implicitly_wait()`无法判断页面内部各种Ajax操作执行完成的时机。只好注释掉这一行代码。
111+
112+
`implicitly_wait()` 无法判断页面内部各种Ajax操作执行完成的时机。只好注释掉这一行代码。
113+
94114
```Python
95115
browser.implicitly_wait(TIMEOUT)
96116
```
97-
98-
### 源码见GitHub
99-
https://github.com/9468305/python-script/tree/master/lagou

0 commit comments

Comments
 (0)