爬取水浒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/

posted @ 2022-06-06 17:55  岸南  阅读(64)  评论(0)    收藏  举报