socket模拟http的登陆_Python网络爬虫之模拟登陆 !
為什么要模擬登陸?
Python網絡爬蟲應用十分廣泛,但是有些網頁需要用戶登陸后才能獲取到信息,所以我們的爬蟲需要模擬用戶的登陸行為,在登陸以后保存登陸信息,以便瀏覽該頁面下的其他頁面。
保存用戶信息
模擬登陸后有兩種方法可以保存用戶信息,通過Session來保存登陸信息或者通過Cookie來保存登陸信息
一、Session的用法
# 導入requests模塊
import requests
# 通過requests的Session來請求網頁
s = requests.Session()
r = s.post(url, headers=headers)
二、Cookie的用法
import urllib.request, http.cookiejar
# 初始化Cookie
cookie = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie))
# 把opener配置為全局 當然也可以不配置全局通過opener來請求網頁
urllib.request.install_opener(opener)
模擬登陸實踐
我們以豆瓣網為例模擬用戶登陸,然后爬取登陸后的用戶界面
(1)找到請求表單
登陸一般是通過Post請求來實現的,其傳遞參數為一個表單,如果要成功登陸,我們需要查看該表單傳遞了哪些內容,然后構造表單做Post請求。怎么獲取表單了,我們只需要打開瀏覽器右鍵查看,然后輸入賬號密碼,點擊登陸查看其NetWork中的請求,找到表單信息即可(推薦使用谷歌瀏覽器),該信息中還能找到請求的url。
表單信息
歡迎大家加入小編創建的Python行業交流群,有大牛答疑,有資源共享,有企業招人!是一個非常不錯的交流基地!群號:683380553
URL
(2)構建表單
表單的key值我們可以通過右鍵頁面檢查頁面源代碼,在頁面源碼中獲得靜態的值(還有些動態信息需要手動獲取)
formdata = {
'redir': 'https://www.douban.com',
'form_email': '賬號',
'form_password': '密碼',
'login': u'登陸'
}
(3)偽裝成瀏覽器進行登錄
我們只需要給請求添加上Headers即可
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/55.0.2883.87 Safari/537.36'}
(4)獲取驗證碼
第二步的表單其實還不完整,還差兩條跟驗證碼有關的信息,這兩條信息是動態變化的,所以我們要手動獲取
r = s.post(url_login, headers=headers)
content = r.text
soup = BeautifulSoup(content, 'html.parser')
captcha = soup.find('img', id='captcha_image')#當登陸需要驗證碼的時候
if captcha:
captcha_url = captcha['src']
re_captcha_id = r'
captcha_id = re.findall(re_captcha_id, content)
print(captcha_id)
print(captcha_url) # 打印驗證碼url
captcha_text = input('Please input the captcha:') # 手動輸入驗證碼
formdata['captcha-solution'] = captcha_text # 添加表單信息
formdata['captcha-id'] = captcha_id
(5)登錄
r = s.post(url_login, data=formdata, headers=headers) # 將表單信息傳入參數中請求頁面即可登錄
完整代碼
# -*- coding: utf-8 -*-
import requests
import re
from bs4 import BeautifulSoup
s = requests.Session()
url_login = 'https://accounts.douban.com/login'
formdata = {
'redir': 'https://www.douban.com',
'form_email': '賬號',
'form_password': '密碼',
'login': u'登陸'
}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/55.0.2883.87 Safari/537.36'}
r = s.post(url_login, data=formdata, headers=headers)
content = r.text
soup = BeautifulSoup(content, 'html.parser')
captcha = soup.find('img', id='captcha_image')#當登陸需要驗證碼的時候
if captcha:
captcha_url = captcha['src']
re_captcha_id = r'
captcha_id = re.findall(re_captcha_id, content)
print(captcha_id)
print(captcha_url)
captcha_text = input('Please input the captcha:')
formdata['captcha-solution'] = captcha_text
formdata['captcha-id'] = captcha_id
r = s.post(url_login, data=formdata, headers=headers)
with open('contacts.html', 'w+', encoding='utf-8') as f:
f.write(r.text)
運行結果
登陸成功
總結
以上是生活随笔為你收集整理的socket模拟http的登陆_Python网络爬虫之模拟登陆 !的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 财务章要公安局备案吗(财务章要公安局备案
- 下一篇: python requests是什么_如