吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5516|回复: 23
收起左侧

[Python 转载] 使用有道获取单词同根词及词根

[复制链接]
麦田孤望者 发表于 2020-3-18 16:56
本帖最后由 麦田孤望者 于 2020-3-19 13:09 编辑

二更 0.gif
示例(无GUI版 就是源码执行长这样)↑
1.gif
示例2(有GUI版 成品和源码发到网盘)↑

暂时没做词性

欢迎大佬继续打磨程序


还有因为GUI版我是用了Pyqt5所以源码太多了所以我就没在这里展示
但是源码和成品都在网盘里需要的自行下载
(有GUI版那个源码双击main.py就可以,那里面我写的注释也很详细)
无GUI版源码:
[Python] 纯文本查看 复制代码
import re
import requests

#作者:吾爱破解论坛 麦田孤望者


#创建会话  这样不用每次都获取cokie 也能提升访问速度
res = requests.session()
#list2是用来存储获取到的同根词及其汉语的列表  
list2 = []

def finda(tx1,tx2,tx3):
    return re.findall(re.compile('{}(.*?){}'.format(tx1,tx2),re.S),tx3)

#搜索函数
def sec(headers,url):
    #list1是用来存放数据的,里面是元组,格式是(同根词链接,词义,单词)
    #同根词链接用于稍后二次搜索同根词用
    list1 = []
    #获取数据
    r = res.get(url,headers=headers)
    #过滤数据
    html = finda('<div id="relWordTab"','</div>',r.text)
    #判断能否找到,不能找到则返回空列表
    if html != []:
        html = html[0]#找到的话就提取元素(列表里一共只有一个元素)
    else:
        return []
    #继续过滤
    html = finda('<p','/p>',html)
    #遍历列表,获得每个词的链接,词义和单词
    for i in html:
        #print(i)
        href = finda('href="','"',i)[0]
        txt = finda('</span>','<',i)[0].strip()
        word = finda('relword">','</a>',i)[0]
        #存到列表里
        list1.append((href,txt,word))
    #因为列表的第一项(也可以说是第0项)是词根,所以从第二项开始遍历
    for i in list1[1:]:
        #去重(list2的作用就是这个)
        if (i[2],i[1]) not in list2:
            print(i[2],i[1])
            list2.append((i[2],i[1]))
     #返回list1 一会弄词根用
    return list1

def main():
    #这一段用于获取部分必要的cookie
    r = res.get('http://www.youdao.com/')
    cookie = '; '.join(finda('<Cookie ',' for',str(r.cookies)))
    #获取要查询的单词
    kw = input("请输入单词")
    #加到url里
    url = 'http://www.youdao.com/w/eng/{}/'.format(kw)
    #cookie加到请求头里
    headers = {
        'Host': 'www.youdao.com',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36',
        'Cookie': cookie
    }
    #第一次搜索同根词,返回列表
    list1 = sec(headers,url)
    #检查是否是空列表(因为之前找不到的话就返回空列表)
    if list1 == []:
        print('未找到')
    else: 
        for i in list1:
            kw = i[2]
            url = 'http://www.youdao.com/w/eng/{}/'.format(kw)
        
            sec(headers,url)

        print('词根:',list1[0][2])

if __name__ == '__main__':
    main()
    #使程序不至于结束运行之后立马消失,input等待输入,在按下回车之前程序是暂停的不会结束
    input()


成品及源码网盘链接:


链接:https://pan.baidu.com/s/1E2Z8niwWmh5cooTUhb7m6Q
提取码:3pxo
来都来了给个评分呗

免费评分

参与人数 6吾爱币 +5 热心值 +6 收起 理由
debugging + 1 谢谢@Thanks!
BY_Dark_Wind + 1 + 1 我很赞同!
fly-陌路 + 1 + 1 十分有用的工具
v662 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
smhengyi + 1 + 1 用心讨论,共获提升!
月巴耳总 + 1 + 1 有创意!希望各位大佬把这个打磨好

查看全部评分

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

smhengyi 发表于 2020-3-19 13:30
这个方面的小工具好像没什么人做,大多数都集成在词典或是学习软件里面了。整个界面清爽的挺好,谢谢楼主分享。
 楼主| 麦田孤望者 发表于 2020-3-18 16:58
46~55行那个循环是因为有道它一个单词同根词不太全
所以就每个同根词再查找一遍同根词
去重之后就是了
fly-陌路 发表于 2020-3-18 17:22
月巴耳总 发表于 2020-3-18 17:28
有创意~希望大佬们继续打磨
x66 发表于 2020-3-18 17:54
可以的,功能再强大一点就好了,最好做个界面。
 楼主| 麦田孤望者 发表于 2020-3-19 10:13
fly-陌路 发表于 2020-3-18 17:22
链接呢,怎么下载

是需要exe文件吗?那我今天封装一下
fly-陌路 发表于 2020-3-19 13:49
对对封装一下谢谢我很需要
 楼主| 麦田孤望者 发表于 2020-3-19 13:51
fly-陌路 发表于 2020-3-19 13:49
对对封装一下谢谢我很需要

封装好了奥
fly-陌路 发表于 2020-3-19 13:52
谢谢谢谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 13:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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