麦田孤望者 发表于 2020-3-18 16:56

使用有道获取单词同根词及词根

本帖最后由 麦田孤望者 于 2020-3-19 13:09 编辑

二更
示例(无GUI版 就是源码执行长这样)↑

示例2(有GUI版 成品和源码发到网盘)↑

暂时没做词性

欢迎大佬继续打磨程序


还有因为GUI版我是用了Pyqt5所以源码太多了所以我就没在这里展示
但是源码和成品都在网盘里需要的自行下载
(有GUI版那个源码双击main.py就可以,那里面我写的注释也很详细)
无GUI版源码:
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#找到的话就提取元素(列表里一共只有一个元素)
    else:
      return []
    #继续过滤
    html = finda('<p','/p>',html)
    #遍历列表,获得每个词的链接,词义和单词
    for i in html:
      #print(i)
      href = finda('href="','"',i)
      txt = finda('</span>','<',i).strip()
      word = finda('relword">','</a>',i)
      #存到列表里
      list1.append((href,txt,word))
    #因为列表的第一项(也可以说是第0项)是词根,所以从第二项开始遍历
    for i in list1:
      #去重(list2的作用就是这个)
      if (i,i) not in list2:
            print(i,i)
            list2.append((i,i))
   #返回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
            url = 'http://www.youdao.com/w/eng/{}/'.format(kw)
      
            sec(headers,url)

      print('词根:',list1)

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


成品及源码网盘链接:

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

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

对对封装一下谢谢我很需要{:1_921:}

麦田孤望者 发表于 2020-3-19 13:51

fly-陌路 发表于 2020-3-19 13:49
对对封装一下谢谢我很需要

封装好了奥

fly-陌路 发表于 2020-3-19 13:52

谢谢谢谢{:1_921:}
页: [1] 2 3
查看完整版本: 使用有道获取单词同根词及词根