Ⅰ 如何用 Python 爬取需要登錄的網站
在header里加入cookie就可以了,例如網路首頁,你沒有登錄和登錄的效果是不一樣的,如果使用python模擬登錄的效果,就要把cookie一起post過去。
Ⅱ 如何用 Python 爬取需要登錄的網站
最近我必須執行一項從一個需要登錄的網站上爬取一些網頁的操作。它沒有我想像中那麼簡單,因此我決定為它寫一個輔助教程。
在本教程中,我們將從我們的bitbucket賬戶中爬取一個項目列表。
教程中的代碼可以從我的Github中找到。
我們將會按照以下步驟進行:
提取登錄需要的詳細信息
執行站點登錄
爬取所需要的數據
在本教程中,我使用了以下包(可以在requirements.txt中找到):
Python
1
2
requests
lxml
步驟一:研究該網站
打開登錄頁面
進入以下頁面 「bitbucket.org/account/signin」。你會看到如下圖所示的頁面(執行注銷,以防你已經登錄)
仔細研究那些我們需要提取的詳細信息,以供登錄之用
在這一部分,我們會創建一個字典來保存執行登錄的詳細信息:
1. 右擊 「Username or email」 欄位,選擇「查看元素」。我們將使用 「name」 屬性為 「username」 的輸入框的值。「username」將會是 key 值,我們的用戶名/電子郵箱就是對應的 value 值(在其他的網站上這些 key 值可能是 「email」,「 user_name」,「 login」,等等)。
2. 右擊 「Password」 欄位,選擇「查看元素」。在腳本中我們需要使用 「name」 屬性為 「password」的輸入框的值。「password」 將是字典的 key 值,我們輸入的密碼將是對應的 value 值(在其他網站key值可能是 「userpassword」,「loginpassword」,「pwd」,等等)。
3. 在源代碼頁面中,查找一個名為 「csrfmiddlewaretoken」 的隱藏輸入標簽。「csrfmiddlewaretoken」 將是 key 值,而對應的 value 值將是這個隱藏的輸入值(在其他網站上這個 value 值可能是一個名為 「csrftoken」,「authenticationtoken」的隱藏輸入值)。列如:「」。
最後我們將會得到一個類似這樣的字典:
Python
1
2
3
4
5
payload = {
"username": "<USER NAME>",
"password": "<PASSWORD>",
"csrfmiddlewaretoken": "<CSRF_TOKEN>"
}
請記住,這是這個網站的一個具體案例。雖然這個登錄表單很簡單,但其他網站可能需要我們檢查瀏覽器的請求日誌,並找到登錄步驟中應該使用的相關的 key 值和 value 值。
步驟2:執行登錄網站
對於這個腳本,我們只需要導入如下內容:
Python
1
2
import requests
from lxml import html
首先,我們要創建session對象。這個對象會允許我們保存所有的登錄會話請求。
Python
1
session_requests = requests.session()
第二,我們要從該網頁上提取在登錄時所使用的 csrf 標記。在這個例子中,我們使用的是 lxml 和 xpath 來提取,我們也可以使用正則表達式或者其他的一些方法來提取這些數據。
Python
1
2
3
4
5
login_url = "n/?next=/"
result = session_requests.get(login_url)
tree = html.fromstring(result.text)
authenticity_token = list(set(tree.xpath("//input[@name='csrfmiddlewaretoken']/@value")))[0]
**更多關於xpath 和lxml的信息可以在這里找到。
接下來,我們要執行登錄階段。在這一階段,我們發送一個 POST 請求給登錄的 url。我們使用前面步驟中創建的 payload 作為 data 。也可以為該請求使用一個標題並在該標題中給這個相同的 url添加一個參照鍵。
Python
1
2
3
4
5
result = session_requests.post(
login_url,
data = payload,
headers = dict(referer=login_url)
)
步驟三:爬取內容
現在,我們已經登錄成功了,我們將從bitbucket dashboard頁面上執行真正的爬取操作。
Python
1
2
3
4
5
url = '/overview'
result = session_requests.get(
url,
headers = dict(referer = url)
)
為了測試以上內容,我們從 bitbucket dashboard 頁面上爬取了項目列表。我們將再次使用 xpath 來查找目標元素,清除新行中的文本和空格並列印出結果。如果一切都運行 OK,輸出結果應該是你 bitbucket 賬戶中的 buckets / project 列表。
Python
1
2
3
4
5
tree = html.fromstring(result.content)
bucket_elems = tree.findall(".//span[@class='repo-name']/")
bucket_names = [bucket.text_content.replace("n", "").strip() for bucket in bucket_elems]
print bucket_names
你也可以通過檢查從每個請求返回的狀態代碼來驗證這些請求結果。它不會總是能讓你知道登錄階段是否是成功的,但是可以用來作為一個驗證指標。
例如:
Python
1
2
result.ok # 會告訴我們最後一次請求是否成功
result.status_code # 會返回給我們最後一次請求的狀態
Ⅲ selenium:python如何繞過登錄頁面登錄網頁
使用場景
在面對需要賬號密碼登錄的網頁時,可以通過定位輸入框,使用send_keys
輸入賬號密碼登錄。
但是在面對某些無法通過頁面直接登錄的場景,比如需要微信或者軟體掃碼、驗證碼等才能進入頁面的情況時,就可以通過cookie進行登錄。
本文主要介紹通過記錄上一次登錄網頁的cookie,在cookie生效期間直接繞過登錄頁面直接進入系統的登錄方式。
登錄頁面後獲取登錄的cookie
讀取之前存入的cookie
這樣只要記錄的cookie生效,那麼就可以不用每次進入系統時都需要在登錄頁面登錄啦~
Ⅳ python+selenium時cookie已經寫入了為什麼還沒有繞過登錄
應該是沒有正確做到
添加 cookie
1.這里需要添加兩個cookie,一個是.CNBlogsCookie,另外一個是.Cnblogs.AspNetCore.Cookies。
3.添加cookie後刷新頁面,接下來就是見證奇跡的時刻了。
2.20.5 參考代碼:
# coding:utf-8
from selenium import webdriver
import time driver = webdriver.Firefox()
driver.get("")
# # 添加cookie c1 = {u'domain': u'.cnblogs.com', u'name': u'.CNBlogsCookie', u'value': u'xxxx', u'expiry': 1491887887, u'path': u'/', u'httpOnly': True, u'secure': False}
c2 = {u'domain': u'.cnblogs.com', u'name': u'.Cnblogs.AspNetCore.Cookies', u'value': u'xxxx', u'expiry': 1491887887, u'path': u'/', u'httpOnly': True, u'secure': False} driver.add_cookie(c1)
# 添加2個值
driver.add_cookie(c2)
time.sleep(3)
# 刷新下頁面就見證奇跡了
driver.refresh()
有幾點需要注意:
1.登錄時候要勾選下次自動登錄按鈕。
2.add_cookie()只添加name和value,對於博客園的登錄是不成功。
3.本方法並不適合所有的網站,一般像博客園這種記住登錄狀態的才會適合
Ⅳ 如何用 Python 爬取需要登錄的網站
可以嘗試添加相關cookie來試著去訪問。自己先本地登錄一下,然後抓取頁面cookie,然後構造相應的請求,讓他看起來像是登錄過的,如果網站驗證的不是特別嚴的話,是可以成功的。
還有一種方法,就是用Selenium框架,他會打開一個瀏覽器,然後訪問指定url。但是還是免不了需要登錄一次,但是登錄過程,輸入賬號密碼和點擊登錄按鈕都是你可以模擬的。具體你可以參照官方文檔。
Ⅵ python中的爬蟲如何去爬那些被設置了許可權的網站
一般的辦法就是去獲取這個許可權
模擬登錄,更換賬號,更換ip
怎麼反的,就怎麼去繞過
多數需要花時間來分析
摸索出反爬蟲的策略,採取辦法對應
Ⅶ 如何用 Python 爬取需要登錄的網站
importrequests
fromlxmlimporthtml
#創建session對象。這個對象會保存所有的登錄會話請求。
session_requests=requests.session()#提取在登錄時所使用的csrf標記
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("//input[@name='csrfmiddlewaretoken']/@value")))[0]
payload={
"username":"<你的用戶名>",
"password":"<你的密碼>",
"csrfmiddlewaretoken":authenticity_token#在源代碼中,有一個名為「csrfmiddlewaretoken」的隱藏輸入標簽。
}
#執行登錄
result=session_requests.post(
login_url,
data=payload,
headers=dict(referer=login_url)
)
#已經登錄成功了,然後從bitbucketdashboard頁面上爬取內容。
url='https://bitbucket.org/dashboard/overview'
result=session_requests.get(
url,
headers=dict(referer=url)
)
#測試爬取的內容
tree=html.fromstring(result.content)
bucket_elems=tree.findall(".//span[@class='repo-name']/")
bucket_names=[bucket.text_content.replace("n","").strip()forbucketinbucket_elems]
print(bucket_names)
Ⅷ python 模擬登錄怎麼跳過證書認證
如果網站後台有相應的驗證是跳不過去的
所以還是需要證書認證的,還需要使用cookie
Ⅸ 如何通過python繞過網站會員
你說的這個和PYTHON有啥關系?
現在都什麼年代了,就算是不會做網站的,拿模板生成網站,也不會出現能讓你不真正登錄就能訪問內容得情況。
Ⅹ 如何用python模擬登錄一個網站
首先你要清楚整個登錄過程,瀏覽器按F12,查看網路,看看瀏覽器發生了什麼請求,收到了什麼回復。
然後用用urllib或requests庫發送request就行了。
關於要不要驗證碼,肯定有那個請求,你沒有看到吧?
如果要就會請求驗證碼,在request裡面發送就好了。