首页 编程教程正文

【python】【分享】对多线程爬取的小说章节重新排序

piaodoo 编程教程 2020-02-22 22:14:58 1348 0 python教程

本文来源吾爱破解论坛

这是处理前后的对比   前面是提取的序号  后面是测试的标题例子
因为刚接触两天所以代码没有格式
变量也特别乱  ,顺便问问大神们有没有更好的写法
可以指点一下



"D:\Program Files\py36\python.exe" D:/源码/练手.py
144    144以退为进.txt
145    145你们是找我的?.txt
163    163去找狐狸.txt
1    1第一章狐狸急了会咬人.txt
126    一二六章妙儿被打伤.txt
111    一百一十一章撸猫.txt
128    一百二十八你后悔了?.txt
214    二一四-终极目标.txt
23    二十三章逃婚.txt
2105    二千一百零五-谈个交易.txt
435    四三五小狐狸醒了.txt
114    第一白一十四不想回去.txt
100    第一百章要不要动手.txt
103    第一百零三章将他杀了即可.txt
31    第三十一章不懂女人.txt
35    第三十五章活在当下.txt
34    第三十四章道歉.txt
30    第三十章刻薄.txt
3    第三章培养感情的套路.txt
90    第九十章失去灵力.txt
9    第九章迟早会走的.txt
2101    第二千一百零一章-地头蛇潘哥.txt
41    第四十一章找到小狐狸.txt
47    第四十七章当面变身.txt
45    第四十五章退婚.txt
44    第四十四章把它送走.txt

Process finished with exit code 0
[Python] 纯文本查看 复制代码

import os, requests, time, tkinter.messagebox, json
from bs4 import BeautifulSoup
from tkinter import *


# 判断是否为数字
def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        pass

    try:
        import unicodedata
        unicodedata.numeric(s)
        return True
    except (TypeError, ValueError):
        pass

    return False  # 判断是否为数字


CN_UNIT = {
    '十': 10,
    '拾': 10,
    '百': 100,
    '佰': 100,
    '白': 100,
    '千': 1000,
    '前': 1000,
    '仟': 1000,
    '钱': 1000,
    '万': 10000,
    '萬': 10000,
    '亿': 100000000,
    '億': 100000000,
    '兆': 1000000000000,
}
CN_NUM = {
    '〇': 0, '一': 1, '二': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九': 9, '零': 0, '令': 0,
    '壹': 1, '贰': 2, '叁': 3, '肆': 4, '伍': 5, '陆': 6, '柒': 7, '捌': 8, '玖': 9, '貮': 2, '两': 2,
}
CN_NUMS = {
    '〇': '0', '一': '1', '二': '2', '三': '3', '四': '4', '五': '5', '六': '6', '七': '7', '八': '8',
    '九': '9', '零': '0', '令': '0', '壹': '1', '贰': '2', '叁': '3', '肆': '4',
    '伍': '5', '陆': '6', '柒': '7', '捌': '8', '玖': '9', '貮': '2', '两': '2'
}


def chinese_123(cn: str) -> str:
    # print(cn)
    a = []
    for cndig in cn:
        a.append(CN_NUMS.get(cndig))  # 从集合里找到要替换的字并且返回,加入到字典里

    y = ''.join(a)  # 重新组合
    return y


# 章节大写转小写
def chinese_to_arabic(cn: str) -> int:
    '''
     CN_UNIT = {
         '十': 10,
         '拾': 10,
         '百': 100,
         '佰': 100,
         '白': 100,
         '千': 1000,
         '前': 1000,
         '仟': 1000,
         '钱': 1000,
         '万': 10000,
         '萬': 10000,
         '亿': 100000000,
         '億': 100000000,
         '兆': 1000000000000,
     }
     CN_NUM = {
         '〇': 0, '一': 1, '二': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九': 9, '零': 0, '令': 0,
         '壹': 1, '贰': 2, '叁': 3, '肆': 4, '伍': 5, '陆': 6, '柒': 7, '捌': 8, '玖': 9, '貮': 2, '两': 2,
     }
     '''
    unit = 0  # current
    ldig = []  # digest
    for cndig in reversed(cn):
        # print(cndig)
        if cndig != '第':

            if cndig in CN_UNIT:
                unit = CN_UNIT.get(cndig)
                # print(unit)
                if unit == 10000 or unit == 100000000:
                    ldig.append(unit)
                    unit = 1
            elif cndig in CN_NUM:
                dig = CN_NUM.get(cndig)

                # print(dig)
                if unit:
                    # print(dig)
                    dig *= unit
                    unit = 0
                ldig.append(dig)
            else:
                return cn
    if unit == 10:
        ldig.append(10)
    val, tmp = 0, 0
    for x in reversed(ldig):
        if x == 10000 or x == 100000000:
            val += tmp * x
            tmp = 0
        else:
            tmp += x
    val += tmp
    return val


def ok(y):
    c = re.findall(r'\d+', str(y))  # 对返回的文字直接提取数字检查是否成功
    if c:  # 判断是否提取到数字如果成功返回文本   不成继续处理
        y = ''.join(c)
    else:  # 提取里面还有这些字的标题然后再处理
        p = re.compile('[一壹两贰二三叁四肆五伍六陆七柒八捌九玖十拾白百佰仟千万零]')
        y = ''.join(p.findall(y))  # 提取包含上面字典里的标题文字
        s = ['十', '拾', '白', '百', '佰', '仟', '千', '万']
        if any(t in y for t in s):  # 判断提取的标题是那种类型是否包含上面数字
            # print(y)
            y = chinese_to_arabic(y)  # 再次召唤转换程序转换
            # print('ok55', y)
        else:
            y = chinese_123(y)

    #print(y)
    return y


def okk():
    path = 'D:\内容'   #处理的文件夹
    mldir = os.listdir(path)

    for x in mldir:
        print(ok(x), '<  ',x)
        #ok(x)


if __name__ == '__main__':
    okk()

版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/7948.html

搜索