成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用Python的POST請(qǐng)求如何使Web抓取更容易?

譯文
開發(fā) 開發(fā)工具
某些情況下,使用POST請(qǐng)求與Web頁面進(jìn)行交互是更好的選擇。

【51CTO.com快譯】當(dāng)使用Python抓取一個(gè)網(wǎng)站時(shí),通常使用urllib或Requests庫(kù)向服務(wù)器發(fā)送GET請(qǐng)求以接收其信息。

然而,在接收所需數(shù)據(jù)之前,需要你向網(wǎng)站發(fā)送一些信息,這可能是因?yàn)楸仨殘?zhí)行登錄或以某種方式與頁面交互。

?[[408135]]?

為了執(zhí)行這樣的交互,Selenium是一個(gè)常用的工具。然而,它也有一些缺點(diǎn),因?yàn)樗悬c(diǎn)慢,有時(shí)也很不穩(wěn)定。另一種方法是發(fā)送一個(gè)POST請(qǐng)求包含網(wǎng)站需要使用請(qǐng)求庫(kù)的信息。

實(shí)際上,與Requests相比,Selenium變得非常慢,是因?yàn)樗鼘?shí)際上要完成打開瀏覽器瀏覽收集數(shù)據(jù)的網(wǎng)站的整個(gè)工作。而對(duì)于某些其他情況,POST請(qǐng)求可能是更好的選擇,這使它成為Web抓取的重要工具之一。

在本文中,將簡(jiǎn)要介紹POST方法,以及如何使用它改進(jìn)Web抓取程序。

Web 抓取

盡管POST請(qǐng)求通常用于與API交互,但它們也有助于在網(wǎng)站中填寫HTML表單或自動(dòng)執(zhí)行其他操作。

在Web抓取過程中,能夠執(zhí)行這些任務(wù)是一項(xiàng)重要的能力,因?yàn)樵讷@取數(shù)據(jù)之前必須與Web頁面進(jìn)行交互是很常見的流程。

識(shí)別HTML表單

在開始向網(wǎng)站發(fā)送信息之前,首先需要了解它將如何接收這些信息。假設(shè)你的想法是登錄你的賬戶。

如果是這種情況,您需要做的就是在POST請(qǐng)求中發(fā)送用戶名和密碼。

但是,如何識(shí)別并查看HTML表單的外觀呢?這時(shí)我們可以考慮使用我們的老朋友:GET請(qǐng)求。使用GET并使用BeautifulSoup解析HTML,很容易看到頁面上的所有HTML表單以及它們的外觀。

代碼如下所示: 

import requests
from bs4 import BeautifulSoup
page = requests.get('http://website.com').text
soup = BeautifulSoup(page, 'html.parser')
forms = soup.find_all('form')
for form in forms:
print(form)

這就是我們簡(jiǎn)單的登錄表單,它將成為上面代碼的輸出: 

<form action="login.html" method="post">
User Name: <input name="username" type="text"/><br/>
Password: <input name="password" type="text"/><br/>
<input id="submit" type="submit" value="Submit"/>
</form>

在這樣的表單中,“動(dòng)作”是網(wǎng)站中你應(yīng)該發(fā)送請(qǐng)求的地方,而“用戶名”和“密碼”是你想要填寫的字段。您還可以注意到,這些值的類型被指定為文本。

提交你的第一個(gè) POST

現(xiàn)在是發(fā)送第一個(gè)POST請(qǐng)求。基本請(qǐng)求將包含兩個(gè)參數(shù):接收請(qǐng)求的URL和發(fā)送的數(shù)據(jù)。

數(shù)據(jù)通常是一個(gè)字典,其中鍵是要填充的字段名,值是要填充的字段內(nèi)容。數(shù)據(jù)也可以通過不同的方式傳遞,但這是一種更復(fù)雜的方法,超出了本文的范圍。

代碼也非常簡(jiǎn)單,只需兩行就可以實(shí)現(xiàn): 

payload = {'username': 'user', 'password': '1234'}
r = requests.post('http://website.com/login.html', data=payload)
print(r.status_code)

第三行代碼只是為了查看請(qǐng)求的狀態(tài)代碼。如果看到的狀態(tài)代碼是200,則意味著一切正常。

現(xiàn)在,我們可以通過將剛才創(chuàng)建的POST請(qǐng)求實(shí)現(xiàn)到函數(shù)中。下面是它的工作原理:

1. post_request函數(shù)將接收兩個(gè)參數(shù):URL和發(fā)送請(qǐng)求的有效負(fù)載。

2. 在函數(shù)內(nèi)部,我們將使用一個(gè) try 和 except 子句讓代碼準(zhǔn)備好處理可能的錯(cuò)誤。

3. 如果代碼沒有崩潰并且我們收到了來自服務(wù)器的響應(yīng),我們將檢查這個(gè)響應(yīng)是否是我們期望的響應(yīng)。如果是,函數(shù)將返回它。

4. 如果我們得到不同的狀態(tài)碼,將不返回任何內(nèi)容,狀態(tài)將被打印出來。

5. 如果代碼引發(fā)異常,我們希望看到發(fā)生了什么,因此該函數(shù)將打印該異常。

示例代碼如下: 

def post_request(url, payload):
try:
r = requests.post(url, data=payload)
if r.status_code == 200:
return r
else:
print(r.status_code)
except Exception as e:
print(e)

然而,根據(jù)網(wǎng)站的不同,為了實(shí)際執(zhí)行登錄,還需要處理其他問題。好消息是,Requests庫(kù)提供了處理cookie、HTTP身份驗(yàn)證等更多內(nèi)容的資源。這里的目標(biāo)只是使用一種常見的表單類型作為一個(gè)簡(jiǎn)單的例子,讓未使用過POST請(qǐng)求的人能夠理解。

最后

特別是如果你向特定網(wǎng)站發(fā)送大量請(qǐng)求,你可能希望在代碼中插入一些隨機(jī)暫停,以免在整個(gè)代碼中使用更多的try和except子句使服務(wù)器過載。而不僅僅是在 post_request函數(shù)中以確保它已準(zhǔn)備好處理可能在此過程中發(fā)現(xiàn)的其他異常。

當(dāng)然,利用代理提供商來確保代碼在還需要提交請(qǐng)求和收集數(shù)據(jù)的情況下繼續(xù)運(yùn)行,以及確保連接受到保護(hù),也是一個(gè)很好的實(shí)踐。

本文的目的只是介紹POST請(qǐng)求以及它們?nèi)绾卧赪eb上收集數(shù)據(jù)。我們基本上學(xué)習(xí)了如何自動(dòng)填寫表單,甚至如何登錄一個(gè)網(wǎng)站。

【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】


責(zé)任編輯:黃顯東 來源: hackernoon.com
相關(guān)推薦

2018-02-25 12:19:02

2020-02-11 12:35:19

Kubernetes容器

2014-12-29 10:11:44

Docke聯(lián)合文件系統(tǒng)AUFS

2019-09-23 11:17:46

機(jī)器學(xué)習(xí)數(shù)據(jù)技術(shù)

2019-09-23 10:59:31

機(jī)器學(xué)習(xí)算法編程

2019-07-09 10:57:04

云計(jì)算無服務(wù)器計(jì)算開發(fā)

2023-03-13 14:26:00

人工智能首席信息官疫情

2017-11-14 08:27:32

云中數(shù)據(jù)存儲(chǔ)

2023-02-28 14:50:02

人工智能首席信息官

2022-05-19 09:53:05

機(jī)器學(xué)習(xí)人工智能算法

2021-01-14 10:48:05

技術(shù)RPCRS

2019-08-05 09:39:05

2024-04-11 11:37:25

人工智能機(jī)器學(xué)習(xí)自動(dòng)化流程

2021-06-07 17:10:07

區(qū)塊鏈出入口控制物聯(lián)網(wǎng)

2010-03-12 19:03:48

Python 拼寫檢查

2022-06-17 09:47:04

Linux命令

2015-11-06 14:41:30

微軟Windows 10

2016-01-28 13:33:07

2017-09-04 18:05:54

Palette色彩貼合

2021-07-19 19:44:57

技術(shù)模型實(shí)踐
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩国产欧美 | 美女黄频 | 欧美色综合一区二区三区 | 精品一区二区在线观看 | 午夜电影福利 | 操操操操操 | 成人性视频免费网站 | 久久9久| 在线视频成人 | 日韩成人免费视频 | 日本久草 | 日本aⅴ中文字幕 | 天天操天天怕 | 欧美亚洲第一区 | 最近最新中文字幕 | 国产熟熟| 久久在线看 | 国产精品久久久久无码av | 一区二区三区亚洲 | 日本在线中文 | 毛色毛片免费看 | 精品视频一二区 | 欧美一区二区三区四区五区无卡码 | 久久av一区二区三区 | 中文成人无字幕乱码精品 | 久久99国产精一区二区三区 | 中文字幕乱码一区二区三区 | 国产丝袜av | 国产精品久久久久久久久图文区 | 久久精品国产久精国产 | 国产在线一区二区三区 | hitomi一区二区三区精品 | 国产91亚洲精品一区二区三区 | 日韩在线视频一区 | 亚洲视频免费观看 | 日本久久黄色 | 99久久精品一区二区毛片吞精 | 一区二区三区视频在线观看 | 91国产在线视频在线 | 色综合视频 | 国产免费一级一级 |