python爬虫实践记录-基于requests访问翻译网页爬取结果
前言
? ? ? ?目前主流的翻譯網站反爬蟲都挺嚴格的,某度有sign算法,谷歌自帶技能冷卻....
查了一下發現一個反爬蟲沒用那么苛刻的翻譯網站:譯典通。
????????第一次聽說這個網站,界面挺老,爬來的源代碼注釋可以追溯到2011年,翻譯的效果可以說是不盡人意Σ(っ °Д °;)っ,但是也沒辦
法,誰讓大廠家的翻譯網頁反爬這么嚴呢
成品展示
?我的配置:
? ? ? ? 系統:win10 19042 專業版
? ? ? ? 瀏覽器: Edge
? ? ? ? PythonIED : Pycharm2021
? ? ? ? python : python3.9.6
?第一步:分析網頁
? ? ? ? 打開翻譯網站,隨便輸入一個詞翻譯,并用f12(開發者工具)
在開發者工具中,打開頂部任務欄的網絡?
?點擊第一個trans/,就可以看到發送請求的url地址,以及發送請求連帶的數據?
發送的數據:
請求的url:
?包括請求標頭里的Cookie和User-Agent都需要記錄下來(常識了)
接著在trans\的任務欄中找到響應可以看到服務器發回的網頁源代碼,翻譯的結果和其他需要的數據都在里面
?分析完畢,總結:
? ? ? ? 1.使用requests得到返回的網頁源代碼
? ? ? ? 2.使用正則表達式re模塊篩選有價值的數據
第二部:開始制作:
? ?首先引入兩個會用到的庫
import requests #request庫 import re #re模塊?變量url儲存網頁的request url
使用一個字典存儲User-agent 和Cookie
url = "https://www.dreye.com.cn/trans/" head = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67","Cookie":"dreye[sys_lang]=gb; phpbb3_jb4z2_u=1; phpbb3_jb4z2_k=; phpbb3_jb4z2_sid=05e7f02ea96bb4513874e06033c06885; PHPSESSID=hgsargck54cmtepq06cb39ahm0" }再使用一個字典存放發送過去數據,在上面的分析可以得出
t_value是翻譯的內容,from、to的意思是從一種語言翻譯到另一種語言
sbt發送的是翻譯,我這也不是很明白,暫且定義它為發送的操作吧
data = {"t_value":test.get(),"from": "zh-CHS","to": "en","sbt": "翻譯","t_r": ""}發送接收數據:
?#1.使用變量res接收接受并且整理出來的數據
?#2.while判斷res是否接受成功,網站有技能冷卻,有時候需要多兩三次重新發送爬取
?#3.response 使用requests.post方法封裝發送到請求url
?#4,變量text記錄response接受回的內容(響應),并使用utf-8重新編碼
?#5.轉string格式
?#6.res搜索符合正則表達式的內容,因為符合表達式的有兩個內容,一個是原文,一個是翻譯后的結果,原文在結果上方所以會首先記錄到原文,所以下標1就是翻譯結果,而下標0是原文內容
Findresult = re.compile(r'class="transtext">(.*?)</textarea><br />') #7res = "" #1.while len(res) == 0: #2response = requests.post(url, data=data, headers=head) #3text = response.content.decode("utf-8") #4text = str(text) #5res = re.findall(Findresult,text)[1] #6等到跳出循環,既可以得出結果
此時已經完成軟件的基本功能,后續使用tk模塊進行窗口化等進行美化和加強即可
源代碼:?
?在上面的基礎功能上做了圖形化還增加了一些功能和選擇
# -*- codeing = utf-8 -*- # @Time : 2021/8/20 16:22 # @File : translate.py # @Software : PyCharmimport requests import reimport tkinter as tk from tkinter import ttk from tkinter import *Findresult = re.compile(r'class="transtext">(.*?)</textarea><br />') head = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67","Cookie":"dreye[sys_lang]=gb; phpbb3_jb4z2_u=1; phpbb3_jb4z2_k=; phpbb3_jb4z2_sid=05e7f02ea96bb4513874e06033c06885; PHPSESSID=hgsargck54cmtepq06cb39ahm0" }def TransLate():url = "https://www.dreye.com.cn/trans/"d_after.insert('0.0',"")data = {"t_value":test.get(),"from": "zh-CHS","to": "en","sbt": "翻譯","t_r": ""}if d_com.get() == "英譯中":data['from'] = "en"data['to'] = "zh-CHS"print(data['to'])res = ""while len(res) == 0:response = requests.post(url, data=data, headers=head)text = response.content.decode("utf-8")text = str(text)res = re.findall(Findresult,text)[1]d_after.insert('0.0',res)root = tk.Tk() root.minsize(430,200) root.maxsize(430,200) root.title('千度翻譯') root.attributes("-alpha",0.8)l_befor = tk.Label(root,text='翻譯前',font=10,width=10) l_befor.grid(row=0,column=0)d_com = ttk.Combobox(root,font=23,width=7) d_com['value'] = ("中譯英","英譯中","待定..") d_com.grid(row=0,column=1) d_com.current(0)test = tk.Entry(root,font=100,width=50) test.grid(row=1,columnspan=2)l_after = tk.Label(root,text='翻譯后',font=20,width=10) l_after.grid(row=2,column=0)d_after = tk.Text(root,width=50,height=3,font=100) d_after.grid(row=3,columnspan=2)d_button = tk.Button(root,text='翻譯',font=25,height=2,width=11,command=TransLate) d_button.grid(row=4,column=0)def Call_C_B():if v.get()==1:root.wm_attributes('-topmost', 1)else:root.wm_attributes('-topmost', 0)v.set(0)v = IntVar() d_selet = tk.Checkbutton(root,text="窗口置項",font=20,variable=v,command=Call_C_B) d_selet.grid(row=4,columnspan=2)root.mainloop()感謝觀看
總結
以上是生活随笔為你收集整理的python爬虫实践记录-基于requests访问翻译网页爬取结果的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网站变灰是怎么样实现的
- 下一篇: websocket python爬虫_p