Python 爬虫原理实现自动google翻译
生活随笔
收集整理的這篇文章主要介紹了
Python 爬虫原理实现自动google翻译
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先用chrome打開谷歌搜翻譯,看看它是怎么請求數據的
右鍵 檢查 進入開發者工具
選擇network,如圖
先點擊一下這個clear,把原來的請求都clear,免得看不清
?
輸入測試翻譯內容
通過請求頭信息,可以發現是get請求,請求翻譯的內容是通過q這個參數傳遞的,其它參數暫時不知道什么意思。
?
q這個參數不清楚谷歌的方法,但有大神破解出來,我們直接用
class Py4Js():def __init__(self):self.ctx = execjs.compile(""" xo=function(a,b){for(var c=0;c<b.length-2;c+=3){var d=b.charAt(c+2);d="a"<=d?d.charCodeAt(0)-87:Number(d);d="+"==b.charAt(c+1)?a>>>d:a<<d;a="+"==b.charAt(c)?a+d&4294967295:a^d}return a}function TL(a){var wo=function(a){return function(){return a}}b=wo(String.fromCharCode(84));var c=wo(String.fromCharCode(75));b=[b(),b()];b[1]=c();b="750.0";var d=wo(String.fromCharCode(116));c=wo(String.fromCharCode(107));d=[d(),d()];c="&"+d.join("")+ "=";d=b.split(".");b=6;for(var e=[],f=0,g=0;g<a.length;g++){var k=a.charCodeAt(g);128>k?e[f++]=k:(2048>k?e[f++]=k>>6|192:(55296==(k&64512)&&g+1<a.length&&56320==(a.charCodeAt(g+1)&64512)?(k=65536+((k&1023)<<10)+(a.charCodeAt(++g)&1023),e[f++]=k>>18|240,e[f++]=k>>12&63|128):e[f++]=k>>12|224,e[f++]=k>>6&63|128),e[f++]=k&63|128)}a=b;for(f=0;f<e.length;f++)a+=e[f],a=xo(a,"+-a^+6");a=xo(a,"+-3^+b+-f");a^=Number(d[1])||0;0>a&&(a=(a&2147483647)+2147483648);a%=1E6;return c+(a.toString()+"."+ (a^b))}""")def getTk(self, text):return self.ctx.call("TL", text)?
根據上面得到的q參數拼接url,得到
def buildUrl(text, tk):baseUrl = "https://translate.google.cn/translate_a/single?client=webapp&sl=zh-CN&tl=fr&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&swap=1&otf=2&ssel=5&tsel=5&kc=1&"baseUrl += 'tk=' + str(tk) + '&'baseUrl += 'q=' + urllib.parse.quote(text)# print(baseUrl)return baseUrlbaseurl里面的tl控制翻譯語言,例如中翻譯英語,tl=en,我這兒是法語,所以tl=fr。
通過requests函數進行請求,得到翻譯的返回結果
def translate(js, text):header = {'cookie': 'NID=188=Nx_B7MPjOKKUBKu4LByiqdUEwcO4goXhVKB0vtqhvJycCD3TIPTgA7HU80AQ4LJXfrAjV8gvawvSDMKgS52MkV3JB44kgzNq9aHp41EuL8-2Cns1re4xCgQvPr1jMI9JPZxFU9fdHtymXto3qCv64HVBIkQ8vfBRMxKeZl0XS4g','user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36'}url = buildUrl(text, js.getTk(text))res = ''try:r = requests.get(url)result = json.loads(r.content.decode("utf-8"))res = result[0][0][0]except Exception as e:res = ''print(url)print("翻譯失敗:" + text)print(e)finally:return res我這個數據全是在excel,所以數據從excel里面讀取,最后再寫回到excel,代碼如下
def write_excel_xls(path, sheet_name, value):index = len(value) # 獲取需要寫入數據的行數workbook = xlwt.Workbook() # 新建一個工作簿sheet = workbook.add_sheet(sheet_name) # 在工作簿中新建一個表格for i in range(0, index):for j in range(0, len(value[i])):sheet.write(i, j, value[i][j]) # 像表格中寫入數據(對應的行和列)workbook.save(path) # 保存工作簿print("xls格式表格寫入數據成功!")def write_excel_xls_append(path, value):index = len(value) # 獲取需要寫入數據的行數workbook = xlrd.open_workbook(path) # 打開工作簿sheets = workbook.sheet_names() # 獲取工作簿中的所有表格worksheet = workbook.sheet_by_name(sheets[0]) # 獲取工作簿中所有表格中的的第一個表格rows_old = worksheet.nrows # 獲取表格中已存在的數據的行數new_workbook = copy(workbook) # 將xlrd對象拷貝轉化為xlwt對象new_worksheet = new_workbook.get_sheet(0) # 獲取轉化后工作簿中的第一個表格for i in range(0, index):for j in range(0, len(value[i])):new_worksheet.write(i + rows_old, j, value[i][j]) # 追加寫入數據,注意是從i+rows_old行開始寫入new_workbook.save(path) # 保存工作簿print("xls格式表格【追加】寫入數據成功!")if __name__ == '__main__':file_name = "test.xlsx"ad_wb = xlrd.open_workbook(file_name)# 獲取第一個目標表單sheet_0 = ad_wb.sheet_by_index(0)book_name_xls = file_name.split(".")[0] + '-翻譯結果.xls'sheet_name_xls = '中法翻譯結果'value_title = [["原文", "法文"], ]write_excel_xls(book_name_xls, sheet_name_xls, value_title)for r in range(0, sheet_0.nrows): #text1 = sheet_0.cell_value(r, 1)js1 = Py4Js()res1 = translate(js1, text1)print(r, text1, res1)value1 = [[text1, str(res1)], ]write_excel_xls_append(book_name_xls, value1)運行后結果如圖
?
???????
總結
以上是生活随笔為你收集整理的Python 爬虫原理实现自动google翻译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pip和conda 换清华源
- 下一篇: OpenCV中图像的BGR格式 Img对