python_爬蟲英譯漢詞典

一、目前的學習

最近 ,一直在看python 基礎知識,爬蟲這面也只是偶爾寫幾下,寫了好多邪惡的小爬蟲,最近最得意的作品就是,爬取某寶某店家某個商品的買家評論照片那個爬蟲太邪惡了,我就自己用了今天寫一個屬于自己的英譯漢詞典

界面.png

二、談談思路

其實原理很簡單,這個可以說是我寫過的最簡單的爬蟲了,我去百度翻譯的網頁,用了一下他的接口然后代碼就完成了~

三、我們還差什么

老規(guī)矩需要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。那現在我可以確定了他就是我要找的,開始我們代碼的第一步發(fā)送請求,解析參數

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)
    #判斷一下網頁返回的狀態(tài)碼
        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,然后處理一下,在處理的時候我發(fā)現如果輸入空格或者是不存在的單詞會報錯,我在這就做了處理,首先判斷字典中必須有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.退出  其他鍵繼續(xù)")
        try:
            if con.isdigit():
                con = int(con)
                if con == 0:
                    break
        except:
            main()
if __name__ == '__main__':
    main()

這里我做了遞歸處理,如果別人輸入非0默認繼續(xù),就重新調用主函數,遞歸的活用

屬于我們自己的英譯漢詞典完成,你可以用pyinstaller庫生成一個exe文件 自己在Windows平臺使用~下一期的爬蟲案例我會接著上篇文章爬取大學排行繼續(xù)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容