分享

Python分析西游记字数+爬虫初步

 云深无际 2021-11-03

分析前先复习一下相关的语法知识~

命令行调用,事后调试法

import osimport pdb
filename = os.environ.get('PYTHONSTARTUP')pdb.set_trace()
if filename and os.path.isfile(filename): exec(open(filename).read())

动态调试法

for x in range(0, 2):    print(x)

循环

li = [1, 2.1, 'Hello']dict = {'k1': 1, 'k2': 2.1, 'k3': 'Hello'}for item in li: # 遍历列表,item是个中间变量,随便取名字 print(item)for key in dict.keys(): # key也是一样的 print(key)for value in dict.values(): print(value)for key, value in dict.items(): # 一次可以把值和键都解压出来 print(key, value)

遍历打印,包括字典

for x in range(0, 10): if x == 5: pass else: print(x)

pass,空命令

for x in range(0, 10): if x == 5: continue else: print(x)

continue 继续

for x in range(0, 10): if x == 5: break else: print(x)

跳出

import timet = time.time()print(t, type(t))# 打印时间戳

打印时间戳

import timea = '2021-07-03 20:24:56'a = int(time.mktime(time.strptime(a, '%Y-%m-%d %H:%M:%S')))# 时间文本转时间戳print(a)

转换

fw = open('./da.txt', 'w')for x in range(0, 10): fw.write(str(x))fw.close()

将数字转换成字符串

fw = open('./da.txt', 'w')for x in range(0, 10): fw.write(str(x)+'\n')fw.close()

加一个换行符写入

fw = open('./da.txt', 'r')for line in fw: print(line)

按照行打印

fw = open('./da.txt', 'r')for line in fw: print(line.strip())fw.close()

将换行符去掉打印

https://github.com/Honlan/fullstack-data-engineer

下载我们的数据

在vscode里面的时候,选择的时候用Tab

报错,已知文件编码是ANSI(GBK)

UnicodeDecodeError: 'gbk' codec can't decode byte 0xfe in position 575056: illegal multibyte sequence

意思是'gbk'编解码器无法解码位置为575056的字节0xfe:非法多字节序列。大概是说,在575056位置的字在gbk中没有,所以解码错误。

(GB2312过时标准、GBK微软标准、GB18030国家标准。GB18030收录的汉字最多)

fr = open( './fullstack-data-engineer-master/fullstack-data-engineer-master/data//xyj.txt', encoding='gb18030', errors='ignore')

改成这样的编码方式

双循环,一个处理整体结构,一个来进行逐个的计数操作

if line[x] in [' ', '\t', '\n', '。', ', ', '(', ')', '(', ')', '? ', '! ', '《', '》', '、', '; ', '“', '”', '……']:

对标点符号的处理

fr = open( './fullstack-data-engineer-master/fullstack-data-engineer-master/data//xyj.txt', encoding='gb18030', errors='ignore')characters = []# 记录出现汉字stat = {}# 记录出现的次数for line in fr: # 开始遍历操作 line = line.strip() # 去掉每一行的空白 if len(line) == 0: # 如果为空行的话,则跳过循环 continue # line = unicode(line) # 这个地方一开始想用Unicode去处理,结果报错了 for x in range(0, len(line)): # 开始大规模的遍历操作,按照字符的规模来 if line[x] in [' ', '\t', '\n', '。', ', ', '(', ')', '(', ')', '? ', '! ', '《', '》', '、', '; ', '“', '”', '……']: # 去掉标点符号和空白符 continue # 没有记录在character中 if not line[x] in characters: characters.append(line[x]) # 没有记录在stat里面 # if not stat.has_key(line[x]): if not line[x] in stat: stat[line[x]] = 0 # 汉字出现的次数+1 stat[line[x]] += 1print(len(characters))print(len(stat))

完整的处理代码

if adict.has_key(key1): 改为
if key1 in adict:

处理了7.7s

可以看看变量表

出现的次数

具体出现的字

stat = sorted(stat.items(), key=lambda d: d[1], reverse=True)# 对stat进行排列,d为每一个键值对,后面是降序饿操作fw = open('result.csv', 'w')for item in stat: fw.write(item[0]+','+str(item[1])+'\n')fr.close()fw.close()

加上一点输出的代码

emmmm,乱码不重要

http://kaoshi.edu.sina.com.cn/college/scorelist?tab=batch&wl=1&local=2&batch=&syear=2013

网页渲染过的结构

打印变量信息

all,全部资源

XHR,异步请求资源

JS,JS代码

我们找到异步

http://kaoshi.edu.sina.com.cn/?p=college&s=api2015&a=getAllCollege&callback=jQuery111202801929497714708_1625322110784&_=1625322110785

复制这个

http://kaoshi.edu.sina.com.cn/?p=college&s=api2015&a=getAllCollege

callback后面的删除了,再复制进去

得到一个json文件

chrome内核的浏览器推荐这个插件

"28": { "province": "内蒙古", "college": { "10126": "内蒙古大学", "10128": "内蒙古工业大学", "10132": "内蒙古医科大学", "10135": "内蒙古师范大学", "10139": "内蒙古财经大学", "10819": "呼伦贝尔学院", "11427": "集宁师范学院", "11631": "河套学院", "11709": "呼和浩特民族学院", "11922": "内蒙古农业大学", "11947": "内蒙古民族大学", "21501": "包头职业技术学院", "21502": "内蒙古建筑职业技术学院", "21503": "兴安职业技术学院", "21504": "内蒙古警察职业学院", "21505": "内蒙古体育职业学院", "21507": "包头轻工职业技术学院", "21508": "呼和浩特职业学院", "40010": "内蒙古丰州职业学院", "40011": "内蒙古经贸外语职业学院", "40012": "赤峰职业技术学院", "40013": "内蒙古北方职业技术学院", "40014": "内蒙古科技职业学院", "40402": "包头钢铁职业技术学院", "40403": "锡林郭勒职业学院", "40404": "内蒙古交通职业技术学院", "40405": "科尔沁艺术职业学院", "40406": "通辽职业学院", "40407": "内蒙古电子信息职业技术学院", "40408": "乌兰察布职业学院", "40409": "乌海职业技术学院", "40410": "内蒙古机电职业技术学院", "40411": "内蒙古化工职业学院", "40412": "内蒙古商贸职业学院", "40413": "包头铁道职业技术学院", "50118": "内蒙古科技大学", "90134": "赤峰学院", "90343": "乌兰察布医学高等专科学校", "90344": "鄂尔多斯职业学院", "90445": "内蒙古师范大学鸿德学院", "90446": "内蒙古大学创业学院", "90757": "内蒙古工业职业学院", "90758": "呼伦贝尔职业技术学院", "90759": "满洲里俄语职业学院" } },

可以找到我们内蒙古的高校

https://www.wdzj.com/dangan/

具体还可以再分析

页面右击出现菜单

https://movie.douban.com/
https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=time&page_limit=20&page_start=0

豆瓣的页面,点击按钮

发现规律

发现评分的文件

多次点击加载,发现json文件增量发送

具体的结构如上

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多