亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

用Python爬取需要登錄的網(wǎng)站

系統(tǒng) 1555 0

最近我必須執(zhí)行一項(xiàng)從一個需要登錄的網(wǎng)站上爬取一些網(wǎng)頁的操作。它沒有我想象中那么簡單,因此我決定為它寫一個輔助教程。

在本教程中,我們將從我們的bitbucket賬戶中爬取一個項(xiàng)目列表。

教程中的代碼可以從我的 Github 中找到。

我們將會按照以下步驟進(jìn)行:

  • 提取登錄需要的詳細(xì)信息

  • 執(zhí)行站點(diǎn)登錄

  • 爬取所需要的數(shù)據(jù)

在本教程中,我使用了以下包(可以在 requirements.txt 中找到):

requests

lxml

#步驟一:研究該網(wǎng)站

打開登錄頁面

進(jìn)入以下頁面 “bitbucket.org/account/signin”。你會看到如下圖所示的頁面(執(zhí)行注銷,以防你已經(jīng)登錄)

用Python爬取需要登錄的網(wǎng)站_第1張圖片

仔細(xì)研究那些我們需要提取的詳細(xì)信息,以供登錄之用

在這一部分,我們會創(chuàng)建一個字典來保存執(zhí)行登錄的詳細(xì)信息:

1. 右擊 “Username or email” 字段,選擇“查看元素”。我們將使用 “name” 屬性為 “username” 的輸入框的值。“username”將會是 key 值,我們的用戶名/電子郵箱就是對應(yīng)的 value 值(在其他的網(wǎng)站上這些 key 值可能是 “email”,“ user_name”,“ login”,等等)。

用Python爬取需要登錄的網(wǎng)站_第2張圖片

2. 右擊 “Password” 字段,選擇“查看元素”。在腳本中我們需要使用 “name” 屬性為 “password” 的輸入框的值。“password” 將是字典的 key 值,我們輸入的密碼將是對應(yīng)的 value 值(在其他網(wǎng)站key值可能是 “userpassword”,“l(fā)oginpassword”,“pwd”,等等)。

用Python爬取需要登錄的網(wǎng)站_第3張圖片

3. 在源代碼頁面中,查找一個名為 “csrfmiddlewaretoken” 的隱藏輸入標(biāo)簽。“csrfmiddlewaretoken” 將是 key 值,而對應(yīng)的 value 值將是這個隱藏的輸入值(在其他網(wǎng)站上這個 value 值可能是一個名為 “csrftoken”,“ authenticationtoken” 的隱藏輸入值)。列如:“Vy00PE3Ra6aISwKBrPn72SFml00IcUV8”。

用Python爬取需要登錄的網(wǎng)站_第4張圖片

最后我們將會得到一個類似這樣的字典:

            
              在學(xué)習(xí)過程中有什么不懂得可以加我的
python學(xué)習(xí)交流扣扣qun,784758214
群里有不錯的學(xué)習(xí)視頻教程、開發(fā)工具與電子書籍。
與你分享python企業(yè)當(dāng)下人才需求及怎么從零基礎(chǔ)學(xué)習(xí)好python,和學(xué)習(xí)什么內(nèi)容
payload = {

"username": "
              
                ",

"password": "
                
                  ",

"csrfmiddlewaretoken": "
                  
                    "

}

                  
                
              
            
          

請記住,這是這個網(wǎng)站的一個具體案例。雖然這個登錄表單很簡單,但其他網(wǎng)站可能需要我們檢查瀏覽器的請求日志,并找到登錄步驟中應(yīng)該使用的相關(guān)的 key 值和 value 值。

#步驟2:執(zhí)行登錄網(wǎng)站

對于這個腳本,我們只需要導(dǎo)入如下內(nèi)容:

            
              import requests

from lxml import html

            
          

##首先,我們要創(chuàng)建 session 對象。這個對象會允許我們保存所有的登錄會話請求。

session_requests = requests.session()

##第二,我們要從該網(wǎng)頁上提取在登錄時所使用的 csrf 標(biāo)記。在這個例子中,我們使用的是 lxml 和 xpath 來提取,我們也可以使用正則表達(dá)式或者其他的一些方法來提取這些數(shù)據(jù)。

            
              login_url = "https://bitbucket.org/account/signin/?next=/"

result = session_requests.get(login_url)

tree = html.fromstring(result.text)

authenticity_token = list(set(tree.xpath("http://input[@name='csrfmiddlewaretoken']/@value")))[0]


            
          

更多關(guān)于xpath 和lxml的信息可以在這里找到。

接下來,我們要執(zhí)行登錄階段。在這一階段,我們發(fā)送一個 POST 請求給登錄的 url。我們使用前面步驟中創(chuàng)建的 payload 作為 data 。也可以為該請求使用一個標(biāo)題并在該標(biāo)題中給這個相同的 url 添加一個參照鍵。

            
              result = session_requests.post(

login_url,

data = payload,

headers = dict(referer=login_url)

)

            
          

#步驟三:爬取內(nèi)容

現(xiàn)在,我們已經(jīng)登錄成功了,我們將從 bitbucket dashboard 頁面上執(zhí)行真正的爬取操作。

            
              url = 'https://bitbucket.org/dashboard/overview'

result = session_requests.get(

url,

headers = dict(referer = url)

)


            
          

為了測試以上內(nèi)容,我們從 bitbucket dashboard 頁面上爬取了項(xiàng)目列表。我們將再次使用 xpath 來查找目標(biāo)元素,清除新行中的文本和空格并打印出結(jié)果。如果一切都運(yùn)行 OK,輸出結(jié)果應(yīng)該是你 bitbucket 賬戶中的 buckets / project 列表。

            
              tree = html.fromstring(result.content)

bucket_elems = tree.findall(".//span[@class='repo-name']/")

bucket_names = [bucket.text_content.replace("n", "").strip() for bucket inbucket_elems]

print bucket_names


            
          

你也可以通過檢查從每個請求返回的狀態(tài)代碼來驗(yàn)證這些請求結(jié)果。它不會總是能讓你知道登錄階段是否是成功的,但是可以用來作為一個驗(yàn)證指標(biāo)。

如果你依然在編程的世界里迷茫,可以加入我們的Python學(xué)習(xí)扣qun:784758214,看看前輩們是如何學(xué)習(xí)的。交流經(jīng)驗(yàn)。從基礎(chǔ)的python腳本到web開發(fā)、爬蟲、django、數(shù)據(jù)挖掘等,零基礎(chǔ)到項(xiàng)目實(shí)戰(zhàn)的資料都有整理。送給每一位python的小伙伴!分享一些學(xué)習(xí)的方法和需要注意的小細(xì)節(jié),點(diǎn)擊加入我們的 python學(xué)習(xí)者聚集地

例如:

result.ok # 會告訴我們最后一次請求是否成功

result.status_code # 會返回給我們最后一次請求的狀態(tài)

就是這樣。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本高清视频www夜色资源网 | 国产精品99久久免费观看 | 久久99精品久久久久久久野外 | 欧美交换乱理伦片在线观看 | 男人天堂黄色 | 视频日韩 | 国产图片综合 | 亚洲欧美自拍一区 | 夜夜爽夜夜叫夜夜高潮漏水 | 精品国产日韩久久亚洲 | 日本精品一区二区三区在线 | 九七97影院理论片手机在线观看 | 日本一区二区中文字幕 | 亚洲欧美人成人让影院 | 羞羞色院91蜜桃在线观看 | 91成人免费观看在线观看 | 久草新在线观看 | 日日摸夜夜添夜夜添影院视频 | 久久免费资源福利资源站 | 久久精品国产只有精品6 | 国产精品久久久久久爽爽爽 | 国内主播大秀福利视频在线看 | 精品乱码一区二区三区四区 | 久99久热只有精品国产99 | 亚洲三级在线免费观看 | 久久久全国免费视频 | 精品人人做人人爽久久久 | 久久99亚洲精品久久久久网站 | 模特视频一二三区 | 久久爆操 | 成人影院高清在线观看免费网站 | 四虎永久在线精品视频播放 | 99在线视频精品费观看视 | 手机看片自拍日韩日韩高清 | 国产精品国产亚洲精品看不卡 | 免费国产午夜在线观看 | 四虎免费网站 | 精品久久久久久中文字幕欧美 | 成人区精品一区二区不卡亚洲 | 欧美综合色 | 视频福利在线 |