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

c59f076b799d9601e7d9148b6055e438.png

(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)

运行结果

登陆成功

69cfe919a9aea22a0fa9c7db6c9201d8.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QPW 系统管理后台用户表(tm_user_info)

文章目录系统管理后台用户表字段说明系统管理后台用户表 CREATE TABLE tm_user_info (user_id int(11) NOT NULL AUTO_INCREMENT COMMENT 用户ID,user_no varchar(30) DEFAULT NULL COMMENT 用户编号, # 允许用户自定义任意字符的编号,非空时不允许重复&#xff0c…

java登录界面命令_Java命令行界面(第12部分):CLAJR

java登录界面命令第十二篇有关在Java中处理命令行参数的文章的特色库是带有Java Reflection的命令行参数 (CLAJR)。 该“库”是单个Java源文件( CLAJR-0.9.java ), 可从SourceForge下载 。 CLAJR的主页当前显示2006年版…

java导出excel搜索下拉框,POI写入Excel下拉框[Select选项]

记录部分方法, 操作POIPOI version3.10-FINALorg.apache.poipoi${poi.version}org.apache.poipoi-ooxml${poi.version}1.首先根据路径读取Excel模板/*** 读取服务器上面的上传的excel文件** param path* return*/public static Workbook readWorkBook(String path) {Workbook w…

openssh rpm包_100台CentOS7要升级OpenSSH怎么办?

背景现在有 100 台 Centos7 需要升级 OpenSSH 到 8.3,怎么办呢?一台台的操作显然不符合我摸鱼的风格,既然每台操作都一样,Ansible Roles 就有用武之地了。正常升级流程首先 rpmbuild 打出 OpenSSH 8.3 的 RPM 包,rpm -…

java 从一个容器获取对象,如何从 Spring IoC 容器中获取对象?

前面几篇文章主要分析了 Spring IoC 容器如何初始化,以及解析和注册我们定义的 bean 信息。其中,「Spring 中的 IoC 容器」对 Spring 中的容器做了一个概述,「Spring IoC 容器初始化」和「Spring IoC 容器初始化(2)」分析了 Spring 如何初始化…

thymeleaf与jsp_PagingAndSortingRepository –如何与Thymeleaf一起使用

thymeleaf与jsp在本教程中,我将演示如何通过分页显示Thymeleaf中的企业客户列表。 1 –项目结构 我们有一个正常的Maven项目结构。 2 –项目依赖性 除了正常的Spring依赖关系之外,我们还添加Thymeleaf和hsqldb,因为我们使用的是嵌入式数据…

MySQL 数据库中如何将表字段的空值全部替换成空字符串

UPDATE permissions SET name ( CASE WHEN IFNULL(name, ) THEN ELSE name END ) WHERE name IS NULL;

python requests是什么_如何基于Python + requests实现发送HTTP请求

这篇文章主要介绍了如何基于Python requests实现发送HTTP请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一、在接口自动化测试过程中,存在两种情况: 一种是不需要鉴权的接口&#…

MySQL 批量生成 SQL 脚本语句解决实际的业务需求/如何拼接字符串/拼接字符串的 SQL 语句

文章目录实际需求分析思路写拼接 SQL 脚本的脚本语句执行得到脚本语句保存成 SQL 脚本文件实际需求 有些行政区域的字段 area_fullname 是空的,如何补全呢?如下所示: 分析思路 (一)如何取到每个区域的上级名称和上…

php的变量都放在哪里,php变量一般放在哪个位置

php变量一般放在哪个位置php定义变量的要求格式,是非常宽松的,至于在哪里定义变量就需要看你的需求,可以在构造函数,也可以在你定义的方法中定义局部变量,也可以在构造函数外面定义全局变量。// 局部变量 函数内部func…

oauth2令牌刷新_了解OAuth2令牌认证

oauth2令牌刷新1.简介 在本教程中,我们将了解OAuth2令牌身份验证 ,以便只有经过身份验证的用户和应用程序才能获得有效的访问令牌,该令牌随后可用于访问服务器上的授权API(在OAuth术语中仅是受保护的资源)。 使用基于…

整型数组 判断 java,给定一个整数数组,判断其中是否有3个数和为N

借助集合将复杂度降到n2,但耗时还是比较长。 import java.util.HashMap;import java.util.HashSet;import java.util.Scanner;/*** Author: coderjjp* Date: 2020-05-07 8:40* Description:给定一个整数数组,判断其中是否有3个数和为N* version: 1.0*/public class …

jsap支付_Java命令行界面(第20部分):JSAP

jsap支付JSAP ( Java Simple Argument Parser )2.1是本系列文章的第二十篇,重点是处理Java的命令行参数。 JSAP页面描述了该库存在的原因:“我在Internet上找到了多个解析器,所有解析器都处理了开关,但是没…

QPW 行政区划字典表(td_area)

行政区划字典表 CREATE TABLE td_area (area_code varchar(10) NOT NULL COMMENT 区域编码,area_name varchar(50) DEFAULT NULL COMMENT 区域名称,area_fullName varchar(300) DEFAULT NULL COMMENT 区域全称,is_hot tinyint(2) DEFAULT 0 COMMENT 是否热门, # 0-否&#xff…

python语句大全input_input提示文字 Python基础输入函数,if-else语句,if-elif

input()函数 此功能用于获取用户输入。 (调用1)input后,程序将立即暂停并等待用户输入。在用户完成内容输入后,单击Enter,程序将继续向下执行。 例如: input() (2&#x…

Linux 命令之 lsusb -- 显示本机的USB设备列表信息

文章目录命令介绍常用选项命令示例(一)显示 USB 设备详细信息命令介绍 lsusb命令用于显示本机的USB设备列表,以及USB设备的详细信息。 lsusb命令显示的USB设备信息来自“/proc/bus/usb”目录下的对应文件。 语法格式:lsusb [选项…

ftp限流java,FTP流量限制的方法

一般来说,下载都是通过FTP来实现的,这样简单的采用ACLs就可以实现的。不过这样存在一个问题,就是原来正常的网络访问也给禁止了,无法继续工作,另外,还有大量的DOWNLOAD不通过FTP,而是借助HTTP协…

argparser_Java命令行界面(第22部分):argparser

argparserJohn Lloyd的argparser是本系列的第二十二篇有关基于Java的命令行参数解析的文章中介绍的库。 该库的主页除了提供单个源代码示例外,还提供了指向基于Javadoc的API文档 ,JAR文件,ZIP文件和TAR文件的链接。 本帖子中使用的示例与本系…

判断 小程序 是否 滚动到页面底部 scrolltolower_微信小程序长列表性能优化——recycle-view

背景:第七次人口普查项目使用是微信小程序原生框架,组件是根据用户需求由项目组前端组组长封装完成的。采集小程序正式登记首页列表页面,根据腾讯老哥在sentry上的监控可以看出,列表页面前端性能比较差,主要表现在一些…

Linux 命令之 lspci -- 显示当前设备所有PCI总线信息

文章目录命令介绍常用选项命令示例(一)罗列 PCI 设备命令介绍 lspci命令用于显示当前主机的所有PCI总线信息,以及所有已连接的PCI设备信息。 现在主流设备如网卡储存等都采用PCI总线 常用选项 选项说明-n以数字方式显示PCI厂商和设备代码-…