python_爬虫英译汉词典

作者: 两点半的杂货铺 | 来源:发表于2017-08-09 21:53 被阅读171次

    一、目前的学习

    最近 ,一直在看python 基础知识,爬虫这面也只是偶尔写几下,写了好多邪恶的小爬虫,最近最得意的作品就是,爬取某宝某店家某个商品的买家评论照片那个爬虫太邪恶了,我就自己用了今天写一个属于自己的英译汉词典

    界面.png

    二、谈谈思路

    其实原理很简单,这个可以说是我写过的最简单的爬虫了,我去百度翻译的网页,用了一下他的接口然后代码就完成了~

    三、我们还差什么

    老规矩需要python3.5、requests库、json模块、pyinstaller模块,现在恭喜你了你要有一个属于自己的英译汉词典了,兴奋么~

    四、完事具备开始爬虫

    我们的目标网站:
    http://fanyi.baidu.com/?aldtype=16047#auto/zh

    目标网站.png
    其实百度真的特别人性化,你只要花49元就可以用他的接口,今天这个爬虫如果商用请自行购买百度的接口,如果自己用也请不要随便传播
    接口购买网址:
    http://api.fanyi.baidu.com/api/trans/product/index
    百度.png

    第一步,既然我们不打算买这个接口,那我们就来解析一下页面,我在网页做了下尝试输入了crawl,观察网页变化,找到一个神奇网址


    接口.png

    打开看看都有什么:

    参数.png

    我看到一个query: 带着我的crawl。那现在我可以确定了他就是我要找的,开始我们代码的第一步发送请求,解析参数

    import requests
    from  requests.exceptions import RequestException
    import json
    
    def get_api(query):
        #最后整理了下其实就这三个参数最重要
        try:
            data = {
            'from':'en',
            'to': 'zh',
            'query': query
            }
        #页面用post 请求我们也跟着用
            r =requests.post('https://fanyi.baidu.com/v2transapi',data = data)
        #判断一下网页返回的状态码
            if r.status_code ==200:
                r.encoding = 'utf-8'
                return  r.text
            else:
                return '请检查网络'
        except RequestException:
            return '连接异常'
    

    我们提取了三个比较重要的参数,分别是from指的是翻译内容语言,to要被翻译成的语言,query要翻译的内容,做了一下异常处理,主要是为了预防连接时候出现的异常

    def  EN_translate(html):
        concent_json = json.loads(html)
        if 'trans_result' in concent_json.keys():
            if 'dst' in concent_json['trans_result']['data'][0].keys():
                print(concent_json['trans_result']['data'][0]['dst'])
            else:
                print("暂时没有找到对应翻译")
        print("请输入正确内容")
    

    上面的代码我们获取接口返回的json,然后处理一下,在处理的时候我发现如果输入空格或者是不存在的单词会报错,我在这就做了处理,首先判断字典中必须有trans_result字段,其次有dst,完美解决问题
    现在,我们的字典完成了,我们这就结束么,来让我们看看百度这个借口还有点啥,毕竟免费的东西不用白不用。

    重点词汇.png

    我们接着来把这个重点词汇也解析出来
    这是我的第一种解析的方法:

    def keywords(concent):
        keywordss=[]
        if 'trans_result' in concent.keys():
            if 'keywords' in concent['trans_result'].keys() :
                for means in concent['trans_result']['keywords']:
                    keywordss.append({'英文单词':means['word'],'中文翻译':means['means']})
    
        else:
            keywordss.append({'英文单词': "未查到",'中文翻译': '未查到'})
    
        return keywordss
    
    

    这是第二种:

    def keywords(concent):
        if 'keywords' in concent['trans_result'].keys() :
            for means in concent['trans_result']['keywords']:
                yield {
                    '英文单词':means['word'],
                    '中文翻译': means['means']
                }
        yield {
                    '英文单词':'未查到',
                    '中文翻译': '重点单词'
                }
    

    最后合成的时候我们以第一种为讲解合成:

    def main():
        while True:
            query = input("请输入英文:").strip()
            html = get_api(query)
            concent = EN_translate(html)
            print('重点单词')
            for keyword in keywords(concent):
                print(keyword["英文单词"],keyword['中文翻译'])
            con = input("0.退出  其他键继续")
            try:
                if con.isdigit():
                    con = int(con)
                    if con == 0:
                        break
            except:
                main()
    if __name__ == '__main__':
        main()
    

    这里我做了递归处理,如果别人输入非0默认继续,就重新调用主函数,递归的活用

    属于我们自己的英译汉词典完成,你可以用pyinstaller库生成一个exe文件 自己在Windows平台使用~下一期的爬虫案例我会接着上篇文章爬取大学排行继续

    相关文章

      网友评论

      本文标题:python_爬虫英译汉词典

      本文链接:https://www.haomeiwen.com/subject/oxwqrxtx.html