更全面的尋找post地址

我們在今後的爬蟲學習過程中,要爬許許多多的網站。

唯有掌握如何對不同網站尋找到正確的post地址,纔是任務之重。

比如,我訪問了一個別的網站,這兒用人人網做例子。

在人人網登陸界面,使用F12進入開發者模式,找到整個登陸界面的源碼:

所以,我們可以看到關鍵的登錄模塊源碼有一個關鍵的參數,這個參數是action,存儲登陸的url地址。

action="http://www.renren.com/Plogin.do"

尋找登陸的post地址:

在form表單中尋找action對應的url地址,post的數據是input標籤中的name的值作爲鍵,真正的用戶名密碼作爲值的字典。post的url地址就是action對應的url地址。

 

尋找post的數據,結合定位js:

1.在開發者模式中,選擇會觸發js時間的按鈕,點擊event listener,找到js的位置。

2.通過chrome中的search all file來搜索url中的關鍵字。

 3.抓包,尋找登陸的url,反覆調試對比,確定不會變的參數。

 

那麼,我們來優化使用post參數請求百度翻譯的代碼:

我們要養成一個好的習慣,在敲代碼之前,我們要打出代碼的草稿如下:

import requests

class BaiduFanyi:
def __init__(self): # 1.1 準備post的url地址,post_data
pass

def parse_url(self): # 1.2 發送post的數據,獲取響應
pass

def get_ret(self): # 4.提取翻譯的結果
pass


def run(self): # 實現主要邏輯
pass
# 1.獲取語言類型
# 1.1 準備post的url地址,post_data
# 1.2 發送post的數據,獲取響應
# 1.3 提取語言類型

# 2.準備post的數據

# 3.發送請求,獲取響應

# 4.提取翻譯的結果


if __name__ == "__main__":
baidu_fanyi = BaiduFanyi()
baidu_fanyi.run()

我們需要花很長時間想好主要邏輯,然後打上草稿,之後我們就可以一一詳細化,完成最終的代碼。
import requests
import json

class BaiduFanyi:
def __init__(self, trans_str): # 1.1 準備post的url地址,post_data
self.trans_str = trans_str
self.lang_detect_url = "https://fanyi.baidu.com/langdetect"
self.headers = {
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1"
}

self.trans_url = "https://fanyi.baidu.com/basetrans"

def parse_url(self, url, data): # 1.2 發送post的數據,獲取響應
response = requests.post(url, data=data, headers=self.headers)
return json.loads(response.content.decode())

def get_ret(self, dict_respsonse): # 4.提取翻譯的結果
ret = dict_respsonse["trans"][0]["dst"]
print("翻譯的結果是:", ret)

def run(self): # 實現主要邏輯
# 1.獲取語言類型
# 1.1 準備post的url地址,post_data
lang_detect_data = {"query": self.trans_str}
# 1.2 發送post的數據,獲取響應
lang = self.parse_url(self.lang_detect_url, lang_detect_data)["lan"]
# 1.3 提取語言類型
# 在網頁源碼中查看langdetect的response數據,在1.2末尾處加上一個“lan”

# 2.準備post的數據
trans_data = {"query": self.trans_str, "from": "zh", "to": "en"} if lang == "zh" else \
{"query": self.trans_str, "from": "en", "to": "zh"}
# 3.發送請求,獲取響應
dict_respsonse = self.parse_url(self.trans_url, trans_data)
# 4.提取翻譯的結果
self.get_ret(dict_respsonse)


if __name__ == "__main__":
baidu_fanyi = BaiduFanyi("大家好哦")
baidu_fanyi.run()

輸出結果:
翻譯的結果是: Hello everyone!


這段代碼對比之前的代碼,得到的優化有:
①可以指定翻譯的初始語言和目標語言。
②實現的翻譯功能更加迅速。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章