小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

爬蟲(chóng)需要登陸怎么辦?這份python登陸代碼請(qǐng)收下

 看見(jiàn)就非常 2020-01-30

相信很多python學(xué)習(xí)者都和我一樣在剛開(kāi)始學(xué)習(xí)爬蟲(chóng)時(shí),對(duì)見(jiàn)到的網(wǎng)站都有種躍躍欲試的沖動(dòng),像豆瓣電影、電影天堂以及各類(lèi)壁紙寫(xiě)真圖片網(wǎng)站的等等,但這些都是不需要登陸賬號(hào)就可以直接請(qǐng)求解析網(wǎng)頁(yè)獲取資源鏈接的,如果遇到需要登陸賬號(hào)的網(wǎng)站時(shí)就不行了。這個(gè)時(shí)候小編就及時(shí)出來(lái)解決大家的問(wèn)題,給大家準(zhǔn)備了一份模擬登陸代碼供大家學(xué)習(xí)。

環(huán)境準(zhǔn)備

python3.5

selenium模塊

模擬登陸思路

通過(guò)selenium中的webdriver控制瀏覽器登錄目標(biāo)網(wǎng)站,然后獲取模擬登陸需要的Cookie,再利用此Cookie來(lái)達(dá)到登錄的效果。本次我們使用webdriver來(lái)驅(qū)動(dòng)火狐瀏覽器插件。在登錄網(wǎng)站時(shí),cookie保存在發(fā)起請(qǐng)求的客戶(hù)端中,網(wǎng)站服務(wù)器利用cookie來(lái)區(qū)分不同的客戶(hù)端。cookie里面記錄了“訪問(wèn)登錄后才能看到的頁(yè)面”這一行為的信息,含有能夠向服務(wù)器證明:“我剛才登錄過(guò)”。因此cookie可以用來(lái)標(biāo)識(shí)客戶(hù)端的身份,以存儲(chǔ)它的信息。

登錄步驟

導(dǎo)入模塊

  1. from selenium import webdriver
  2. import requests
  3. import json

啟動(dòng)瀏覽器

通過(guò)webdriver驅(qū)動(dòng)火狐瀏覽器,然后在加載將要訪問(wèn)的目標(biāo)網(wǎng)站

  1. driver = webdriver.Firefox()
  2. driver.get('目標(biāo)網(wǎng)站')

點(diǎn)擊登錄

找到網(wǎng)頁(yè)中登錄按鈕所在的位置,通過(guò)瀏覽器模擬點(diǎn)擊打開(kāi)登錄框,然后找到用戶(hù)名和密碼框的位置,輸入用戶(hù)名及密碼,在尋找按鈕以及密碼輸入框時(shí)可鼠標(biāo)右鍵然后找到“查看元素”選項(xiàng),點(diǎn)擊之后可在網(wǎng)頁(yè)源碼中尋找。代碼如下

  1. #清空登錄框
  2. driver.find_element_by_xpath("./*//input[@name='username']").clear()
  3. #自動(dòng)填入登錄用戶(hù)名
  4. driver.find_element_by_xpath("./*//input[@name='username']").send_keys(user)
  5. #清空密碼框
  6. driver.find_element_by_xpath("./*//input[@name='password']").clear()
  7. #自動(dòng)填入登錄密碼
  8. driver.find_element_by_xpath("./*//input[@name='password']").send_keys(password)
  9. time.sleep(8)
  10. #點(diǎn)擊登錄按鈕進(jìn)行登錄
  11. driver.find_element_by_xpath("./*//button[@name='loginsubmit']").click()
  12. time.sleep(10)

記錄cookie

經(jīng)過(guò)上面幾步,如果沒(méi)有報(bào)錯(cuò)的話(huà)就說(shuō)明已經(jīng)登錄成功了,接下來(lái)我們?cè)俅渭虞d網(wǎng)頁(yè)獲取登錄cookie。代碼如下

  1. driver.get('目標(biāo)網(wǎng)站')
  2. #獲取cookies
  3. cookie_items = driver.get_cookies()
  4. for cookie_item in cookie_items:
  5.     post[cookie_item['name']] = cookie_item['value']
  6. cookie_str = json.dumps(post)
  7. with open('cookie.txt', 'w', encoding='utf-8') as f:
  8.     f.write(cookie_str)
  9. f.close()

通過(guò)cookie登錄

獲得cookie之后,模擬登陸就跟之前一樣用requests請(qǐng)求網(wǎng)站,只需要將cookie內(nèi)容加到請(qǐng)求中即可。代碼如下

  1. header = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64;rv:53.0) Gecko/20100101 Firefox/53.0"}
  2. with open('cookie.txt', 'r', encoding='utf-8') as f:
  3.     cookie = f.read()
  4. cookies = json.loads(cookie)
  5. res = requests.get(url=url, cookies=cookies, headers=header)

對(duì)于有些網(wǎng)站來(lái)說(shuō),cookie的生命期較長(zhǎng),所以在第一次登陸獲取cookie后,在以后模擬登陸時(shí)只需要調(diào)用此cookie即可,十分方便。

具體代碼如下

  1. from selenium import webdriver
  2. import time
  3. import json

  4. user="用戶(hù)名"
  5. password="密碼"

  6. driver = webdriver.Firefox()
  7. driver.get('目標(biāo)網(wǎng)站')
  8. time.sleep(5)
  9. driver.find_element_by_xpath("./*//button[@type='submit']").click()
  10. print("正在輸入用戶(hù)名和密碼")
  11. #清空登錄框
  12. driver.find_element_by_xpath("./*//input[@name='username']").clear()
  13. #自動(dòng)填入登錄用戶(hù)名
  14. driver.find_element_by_xpath("./*//input[@name='username']").send_keys(user)
  15. #清空密碼框
  16. driver.find_element_by_xpath("./*//input[@name='password']").clear()
  17. #自動(dòng)填入登錄密碼
  18. driver.find_element_by_xpath("./*//input[@name='password']").send_keys(password)

  19. time.sleep(8)
  20. #點(diǎn)擊登錄按鈕進(jìn)行登錄
  21. driver.find_element_by_xpath("./*//button[@name='loginsubmit']").click()
  22. time.sleep(10)
  23. driver.get('目標(biāo)網(wǎng)站')
  24. #獲取cookies
  25. cookie_items = driver.get_cookies()

  26. #獲取到的cookies是列表形式,將cookies轉(zhuǎn)成json形式并存入本地名為cookie的文本中
  27. for cookie_item in cookie_items:
  28.     post[cookie_item['name']] = cookie_item['value']
  29. cookie_str = json.dumps(post)
  30. with open('cookie.txt', 'w', encoding='utf-8') as f:
  31.     f.write(cookie_str)
  32. f.close()
  33. print("登錄完成")

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多