日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

socket模拟http的登陆_Python网络爬虫之模拟登陆 !

發(fā)布時(shí)間:2023/12/3 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 socket模拟http的登陆_Python网络爬虫之模拟登陆 ! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為什么要模擬登陸?

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。