吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2976|回复: 10
收起左侧

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

[复制链接]
jayfox 发表于 2020-2-4 21:45
这是处理前后的对比   前面是提取的序号  后面是测试的标题例子
因为刚接触两天所以代码没有格式
变量也特别乱  ,顺便问问大神们有没有更好的写法
可以指点一下



"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()

免费评分

参与人数 1吾爱币 +5 热心值 +1 收起 理由
苏紫方璇 + 5 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ymhld 发表于 2020-2-8 10:57
用正则表达式
import re
re.compile(r'(\d+?)\s+(\w+)')

from natsort import natsorted  #自然排序
新文件list=natsorted(旧文件list)
filename1s=natsorted(filenames)

[Python] 纯文本查看 复制代码
import re
from natsort import natsorted 
from operator import attrgetter, itemgetter
s='''
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
'''
print (s)
PP=re.compile(r'(\d+?)\s+(\w+)')
namelist=re.findall(PP,s)
print (namelist)
namelist1=natsorted(namelist,key=itemgetter(0))
print (namelist1)


头像被屏蔽
袁煜914 发表于 2020-2-4 22:08
爱奴 发表于 2020-2-4 22:24
MOEYU_VANILLA 发表于 2020-2-5 14:21
学习学习
lzb163 发表于 2020-2-5 15:20
用数据库存储就不会乱了
 楼主| jayfox 发表于 2020-2-6 01:53
lzb163 发表于 2020-2-5 15:20
用数据库存储就不会乱了

用哪个数据库,指点一下,我刚学,还有就是如果抓到的文字标题章节像我上面那样各种写法都有怎么处理
boxness 发表于 2020-2-7 12:58
本帖最后由 boxness 于 2020-2-7 13:00 编辑

github有一个中文转换数字的库chinese2digits,下个那就直接转换得到数字了,还有,你这为什么感觉没爬完整,有些有第有些没有...
 楼主| jayfox 发表于 2020-2-8 02:36
boxness 发表于 2020-2-7 12:58
github有一个中文转换数字的库chinese2digits,下个那就直接转换得到数字了,还有,你这为什么感觉没爬完整,有 ...

我这个是测试编号的,因为我爬取的网站章节比较不统一,就像例子上那样  各种标题样式都有所以写的这个测试
ymhld 发表于 2020-2-8 10:58
结果如下:


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

[('144', '144以退为进'), ('145', '145你们是找我的'), ('163', '163去找狐狸'), ('1', '1第一章狐狸急了会咬人'), ('126', '一二六章妙儿被打伤'), ('111', '一百一十一章撸猫'), ('128', '一百二十八你后悔了'), ('214', '二一四'), ('23', '二十三章逃婚'), ('2105', '二千一百零五'), ('435', '四三五小狐狸醒了'), ('114', '第一白一十四不想回去'), ('100', '第一百章要不要动手'), ('103', '第一百零三章将他杀了即可'), ('31', '第三十一章不懂女人'), ('35', '第三十五章活在当下'), ('34', '第三十四章道歉'), ('30', '第三十章刻薄'), ('3', '第三章培养感情的套路'), ('90', '第九十章失去灵力'), ('9', '第九章迟早会走的'), ('2101', '第二千一百零一章'), ('41', '第四十一章找到小狐狸'), ('47', '第四十七章当面变身'), ('45', '第四十五章退婚'), ('44', '第四十四章把它送走')]
[('1', '1第一章狐狸急了会咬人'), ('3', '第三章培养感情的套路'), ('9', '第九章迟早会走的'), ('23', '二十三章逃婚'), ('30', '第三十章刻薄'), ('31', '第三十一章不懂女人'), ('34', '第三十四章道歉'), ('35', '第三十五章活在当下'), ('41', '第四十一章找到小狐狸'), ('44', '第四十四章把它送走'), ('45', '第四十五章退婚'), ('47', '第四十七章当面变身'), ('90', '第九十章失去灵力'), ('100', '第一百章要不要动手'), ('103', '第一百零三章将他杀了即可'), ('111', '一百一十一章撸猫'), ('114', '第一白一十四不想回去'), ('126', '一二六章妙儿被打伤'), ('128', '一百二十八你后悔了'), ('144', '144以退为进'), ('145', '145你们是找我的'), ('163', '163去找狐狸'), ('214', '二一四'), ('435', '四三五小狐狸醒了'), ('2101', '第二千一百零一章'), ('2105', '二千一百零五')]
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 21:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表