爬取水浒108将座次表并转化markdown表格
前言
给自己出的一道小练习,整理一些python处理文件、修改字符串中常用的函数。
获取数据
示例网页:《水浒传》梁山108将信息对照表(按尊卑座次排名)
右键查看网页源代码,复制html内容另存为txt文件,至此得到html表格。
//txt文件
<table border="1" cellspacing="0" <tr>
...
<td>1</td>
<td><b class="btn btn-success btn-xs">宋江</b></td>
<td>及时雨、呼保义、孝义黑三郎</td>
<td>总督兵马大元帅</td>
<td>第18回</td>
<td>第41回</td>
<td>天魁星</td>
<td>1</td>
</tr>
<tr>
<td>2</td>
<td><b class="btn btn-success btn-xs">卢俊义</b></td>
<td>玉麒麟</td>
<td>总督兵马副元帅</td>
<td>第61回</td>
<td>第67回</td>
<td>天罡星</td>
<td>2</td>
</tr>
...
打开文件
打开txt基本格式
f_path='test.txt'
with open(f_path,'r',encoding="utf_8") as f:
#c=f.read() #读取所有内容
for line in f:
print(line)
处理数据
首先,每段开头和结尾的空格碍事,删去。
删除空格用到的方法:
str.strip() #删除字符串两边的空格
str.lstrip() #删除字符串左边的空格
str.rstrip() #删除字符串右边的空格
观察发现,我们想要的内容均在,之间;需要的内容如“宋江”、“第18回”等等均为汉字和数字,因此考虑用正则表达式过滤内容。
python正则模块教程
常用字符unicode的编码范围:
- 数字:\u0030-\u0039
- 汉字:\u4e00-\u9fa5
- 大写字母:\u0041-\u005a
- 小写字母:\u0061-\u007a
- 英文字母:\u0041-\u007a
在这里,需要删除删除所有非汉字、非数字内容,示例如下:
import re
str1 = " 123Hello你好world 世界789 "
str2 = re.sub('([^\u4e00-\u9fa5\u0030-\u0039])', '', str1)
print(str2) # "123你好世界789"
注意,第七列(循环中的第七个)的数据与第一列数据重复,删掉。
同时,我们要将数据转成markdown表格的格式 XX|XX|... 所以提取每个 "td" 间的内容后加上 "|" 。
写入文件
写入txt基本格式
file =open('test.txt','w')
for i in range(len(save)):
file.write(save[i]+'\n')
file.close()
完整代码
import re
f_path='html.txt'
t,save,s=0,[],''
with open(f_path,'r',encoding="utf_8") as f:
for line in f:
line=line.strip() #除去头尾空格
if line[:4]=='<td>':
t+=1
#删除字符串中的所有符号,只保留汉字和数字
line = re.sub('([^\u4e00-\u9fa5\u0030-\u0039])', '', line)
if t<7:
s+=line+'|' # |:markdown表格格式
elif t==7:
s+=line
else:
save.append(s)
t,s=0,''
file =open('save.txt','w')
for i in range(len(save)):
file.write(save[i]+'\n')
file.close()
效果展示
至此,得到保存markdown表格形式的txt文件
1|宋江|及时雨呼保义孝义黑三郎|总督兵马大元帅|第18回|第41回|天魁星
2|卢俊义|玉麒麟|总督兵马副元帅|第61回|第67回|天罡星
3|吴用|智多星|掌管机密正军师|第14回|第20回|天机星
4|公孙胜|入云龙|掌管机密副军师|第15回|第20回|天闲星
5|关胜|大刀|马军五虎将之首兼左军大将领正东旱寨守尉主将|第63回|第64回|天勇星
6|林冲|豹子头|马军五虎将之二兼右军大将领正西旱寨守尉主将|第7回|第12回|天雄星
然后手动添加一行表头即可,复制到.md文件,最终效果展示在个人博客中。
https://shoresouth.gitee.io/2022/05/24/shui-hu-chuan-108-jiang/

浙公网安备 33010602011771号