寫乙個小功能來模擬搜狗翻譯傳送請求,讓這個小功能擁有翻譯的功能。
首先開啟搜狗翻譯,然後f12或右鍵選擇檢查,找到network,再搜狗翻譯內進行一次翻譯,之後name下就出現一堆東西,如:
看著大概也知道,出來translatev2、sug**2和translatev2forpicset其餘都是一些,以上三個都是post請求,這裡選擇的是sug**2,它是釋義而且傳的資料也少所以選它了,至於其他兩個,到時候自己試試吧。
從這裡就可以知道了請求url位址(requset url),和所要傳輸的資料(from data)
接下來就是將所要的內容賦予我們python裡的變數:
url=
""data=
data[
"from"]=
"auto"
data[
"to"]=
"zh-chs"
data[
"client"]=
"pc"
data[
"text"
]=content
data[
"uuid"]=
"a494de6c-0c2c-4e1d-a6be-be70df3c2dfa"
data[
"pid"]=
"sogou-dict-vr"
data[
"addsugg"]=
"on"
之後就是傳送資料,但這是post請求,不是get請求,get請求直接拼接所要傳輸的資料就行了,而post請求要被編碼為位元組資料,所以我們要轉編碼。
傳送資料就是請求,和轉編碼它們需要我們在python內引用urllib模組.
請求要urllib內的request(urllib.request 用於開啟**的可擴充套件庫。)、轉編碼需要urllib內的parse(urllib.parse url解析元件)
所以在最前面引入需要的模組
import urllib.request
import urllib.parse
在data賦值完成後,將data轉碼為utf-8,這要看別人網頁的請求頭是啥了,現在一般都是utf-8。
在python中,我們通常使用urllib中的urlencode方法將字典編碼,所以:
data = urllib.parse.urlencode(data)
.encode(
'utf-8'
)
response = urllib.request.urlopen(url,data)
響應後,我們需要讀取響應,再把它轉碼為utf-8
html = response.read(
).decode(
'utf-8'
)
讀取到之後,但它是字串形式:
發現它很像是乙個字典,其實就是字典的字串格式,我們現在就需要把它從字串轉為字典,這裡需要引用乙個模組,json模組。
在**最上面的引用**後加入
import json
獲取到響應回來的內容賦值給html後,轉為字典如下:
target=json.loads(html)
輸出:
我們需要的是 鍵:data的值,它的值是乙個列表,需要第乙個也就是索引0,列表裡又是字典,需要的是 鍵:v的值
所以:
target=target[
'data'][
0]["v"
]print
("翻譯結果:%s"
% target)
完整的一些小修改後的**:
import urllib.request
import urllib.parse
import json
import time
import random
while
true
: content=
input
("請輸入需要翻譯的內容(輸入q!退出程式):"
)if content ==
'q!'
:break
url=
""data=
data[
"from"]=
"auto"
data[
"to"]=
"zh-chs"
data[
"client"]=
"pc"
data[
"text"
]=content
data[
"uuid"]=
"a494de6c-0c2c-4e1d-a6be-be70df3c2dfa"
data[
"pid"]=
"sogou-dict-vr"
data[
"addsugg"]=
"on"
data = urllib.parse.urlencode(data)
.encode(
'utf-8'
) req =urllib.request.request(url,data)
req.add_header(
"user-agent",)
response=urllib.request.urlopen(req)
html=response.read(
).decode(
'utf-8'
) target=json.loads(html)
ifnot
'data'
in target:
print
('沒有該翻譯!'
)else
: target=target[
'data'][
0]["v"
]print
("翻譯結果:%s"
% target)
time.sleep(
2)
python 自製搜狗翻譯工具
一 登陸搜狗翻譯頁面,分析請求 在裡面輸入中文翻譯 可以看出,請求的位址為 2 輸入英文翻譯 綜合上述分析,當改變裡面內容時,form data 向後台傳送的資料 中to uuid s的值在變化,其他幾個沒有變化 二 找到請求的js 從 uuid的值 a953132c 77de 4029 95df ...
利用fsockopen模擬HTTP傳送請求
首先檢查php.ini 中 allow url fopen 選項是否開啟,需要開啟 get 方式傳送請求 fp fsockopen localhost 80,errno,errstr,10 host 埠 錯誤碼 錯誤訊息 超時時間 請求行 http get http server.php?use 1...
Python基於httpx模組實現傳送請求
一 httpx模組是什麼?乙個用於http請求的模組,類似於requests aiohttp 既能傳送同步請求 是指在單程序單執行緒的 中,發起一次請求後,在收到返回結果之前,不能發ofwnrif起下一次請求 又能傳送非同步請求 是指在單程序單執行緒的 中,發起一次請求後,在等待 返回結果的時間裡,...