日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python爬虫实践记录-基于requests访问翻译网页爬取结果

發布時間:2024/3/26 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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访问翻译网页爬取结果的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。