socket模拟http的登陆_Python网络爬虫之模拟登陆 !
為什么要模擬登陸?
Python網(wǎng)絡(luò)爬蟲應(yīng)用十分廣泛,但是有些網(wǎng)頁(yè)需要用戶登陸后才能獲取到信息,所以我們的爬蟲需要模擬用戶的登陸行為,在登陸以后保存登陸信息,以便瀏覽該頁(yè)面下的其他頁(yè)面。
保存用戶信息
模擬登陸后有兩種方法可以保存用戶信息,通過Session來保存登陸信息或者通過Cookie來保存登陸信息
一、Session的用法
# 導(dǎo)入requests模塊
import requests
# 通過requests的Session來請(qǐng)求網(wǎng)頁(yè)
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配置為全局 當(dāng)然也可以不配置全局通過opener來請(qǐng)求網(wǎng)頁(yè)
urllib.request.install_opener(opener)
模擬登陸實(shí)踐
我們以豆瓣網(wǎng)為例模擬用戶登陸,然后爬取登陸后的用戶界面
(1)找到請(qǐng)求表單
登陸一般是通過Post請(qǐng)求來實(shí)現(xiàn)的,其傳遞參數(shù)為一個(gè)表單,如果要成功登陸,我們需要查看該表單傳遞了哪些內(nèi)容,然后構(gòu)造表單做Post請(qǐng)求。怎么獲取表單了,我們只需要打開瀏覽器右鍵查看,然后輸入賬號(hào)密碼,點(diǎn)擊登陸查看其NetWork中的請(qǐng)求,找到表單信息即可(推薦使用谷歌瀏覽器),該信息中還能找到請(qǐng)求的url。
表單信息
歡迎大家加入小編創(chuàng)建的Python行業(yè)交流群,有大牛答疑,有資源共享,有企業(yè)招人!是一個(gè)非常不錯(cuò)的交流基地!群號(hào):683380553
URL
(2)構(gòu)建表單
表單的key值我們可以通過右鍵頁(yè)面檢查頁(yè)面源代碼,在頁(yè)面源碼中獲得靜態(tài)的值(還有些動(dòng)態(tài)信息需要手動(dòng)獲取)
formdata = {
'redir': 'https://www.douban.com',
'form_email': '賬號(hào)',
'form_password': '密碼',
'login': u'登陸'
}
(3)偽裝成瀏覽器進(jìn)行登錄
我們只需要給請(qǐng)求添加上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)獲取驗(yàn)證碼
第二步的表單其實(shí)還不完整,還差兩條跟驗(yàn)證碼有關(guān)的信息,這兩條信息是動(dòng)態(tài)變化的,所以我們要手動(dòng)獲取
r = s.post(url_login, headers=headers)
content = r.text
soup = BeautifulSoup(content, 'html.parser')
captcha = soup.find('img', id='captcha_image')#當(dāng)?shù)顷懶枰?yàn)證碼的時(shí)候
if captcha:
captcha_url = captcha['src']
re_captcha_id = r'
captcha_id = re.findall(re_captcha_id, content)
print(captcha_id)
print(captcha_url) # 打印驗(yàn)證碼url
captcha_text = input('Please input the captcha:') # 手動(dòng)輸入驗(yàn)證碼
formdata['captcha-solution'] = captcha_text # 添加表單信息
formdata['captcha-id'] = captcha_id
(5)登錄
r = s.post(url_login, data=formdata, headers=headers) # 將表單信息傳入?yún)?shù)中請(qǐng)求頁(yè)面即可登錄
完整代碼
# -*- 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': '賬號(hào)',
'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')#當(dāng)?shù)顷懶枰?yàn)證碼的時(shí)候
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)
運(yùn)行結(jié)果
登陸成功
總結(jié)
以上是生活随笔為你收集整理的socket模拟http的登陆_Python网络爬虫之模拟登陆 !的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 财务章要公安局备案吗(财务章要公安局备案
- 下一篇: python requests是什么_如