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

二、談談思路
其實原理很簡單,這個可以說是我寫過的最簡單的爬蟲了,我去百度翻譯的網頁,用了一下他的接口然后代碼就完成了~
三、我們還差什么
老規(guī)矩需要python3.5、requests庫、json模塊、pyinstaller模塊,現在恭喜你了你要有一個屬于自己的英譯漢詞典了,興奮么~
四、完事具備開始爬蟲
我們的目標網站:
http://fanyi.baidu.com/?aldtype=16047#auto/zh

其實百度真的特別人性化,你只要花49元就可以用他的接口,今天這個爬蟲如果商用請自行購買百度的接口,如果自己用也請不要隨便傳播
接口購買網址:
http://api.fanyi.baidu.com/api/trans/product/index

第一步,既然我們不打算買這個接口,那我們就來解析一下頁面,我在網頁做了下嘗試輸入了crawl,觀察網頁變化,找到一個神奇網址

打開看看都有什么:

我看到一個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,完美解決問題
現在,我們的字典完成了,我們這就結束么,來讓我們看看百度這個借口還有點啥,畢竟免費的東西不用白不用。

我們接著來把這個重點詞匯也解析出來
這是我的第一種解析的方法:
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ù)