Python脚本 抓取/翻译动漫角色名字的罗马音或外文名(用于搜索图片)

在 https://danbooru.donmai.us 搜索色图的时候,因为老美的网站的缘故,不支持中文和日文输入,只能输入平假名对应罗马音来寻找人物.像我虽然日语N1了,但是遇到人名有时依然会念错.所以需要一个可以直接翻译角色名的API.不过找了一圈,什么有道翻译,谷歌翻译(googleTranslate for py),都是坑=,=
例如:宝多六花->Treasure six flowers
我佛了,什么精致翻译
所以不考虑机翻考虑人翻,立刻想到可以用百度百科或者萌娘百科的翻译,于是不用翻译直接用爬虫爬下来不就好了吗?
所以立刻写完测试,拿来使用(好像没啥问题)
图一:输入框中输入角色的罗马音
Python脚本 抓取/翻译动漫角色名字的罗马音或外文名(用于搜索图片)_第1张图片
图二:百科翻译
Python脚本 抓取/翻译动漫角色名字的罗马音或外文名(用于搜索图片)_第2张图片
Python脚本 抓取/翻译动漫角色名字的罗马音或外文名(用于搜索图片)_第3张图片

测试结果

1.动漫角色
Python脚本 抓取/翻译动漫角色名字的罗马音或外文名(用于搜索图片)_第4张图片
Python脚本 抓取/翻译动漫角色名字的罗马音或外文名(用于搜索图片)_第5张图片

其他

另外,还能搜现实人物的外文名。因为百度百科的网页样式比较统一,所以不用修改爬虫就能得到,但是萌百的页面普遍有三种1.角色 2.重名->重定向 3.现实人物,而这里只做了对角色的搜索页面,所以现实人物会GG。另外没有对没有平假名的页面也会GG
Python脚本 抓取/翻译动漫角色名字的罗马音或外文名(用于搜索图片)_第6张图片
Python脚本 抓取/翻译动漫角色名字的罗马音或外文名(用于搜索图片)_第7张图片
我觉得可以走NLP方向研究下平假名翻译这个问题

Python代码

import requests
from lxml import etree
import re

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36'
}


def get_name_from_baidu(name):
    try:
        res = requests.get("https://baike.baidu.com/item/" + name, headers=headers)
        if res.status_code == 404:
            raise Exception("百度百科找不到信息")
        res.encoding = res.apparent_encoding
        html = etree.HTML(res.text)
        name_str = html.xpath('//dd[@class="basicInfo-item value"]')[1].xpath('text()')
        return re.search("[a-zA-Z](.*)[a-zA-Z]", ''.join(name_str)).group()
    except Exception as e:
        print(e)


def get_name_from_moe(name):
    try:
        res = requests.get("https://zh.moegirl.org/" + name, headers=headers)
        if res.status_code == 404:
            raise Exception("萌娘百科找不到信息")
        res.encoding = res.apparent_encoding
        html = etree.HTML(res.text)
        name_str = html.xpath("//span[@itemprop='name']/text()")[0]
        return re.search("\w(.*)\w", name_str).group()
    except Exception as e:
        print(e)


if __name__ == '__main__':
    name = input("输入名字:   ")
    print("从百度百科得到:")
    print(get_name_from_baidu(name))
    print("从萌娘百科得到:")
    print(get_name_from_moe(name))

你可能感兴趣的:(Scripts)