在模拟登录上,requests确实比python标准库中的相关模块更加简洁.

假设你需要去爬一组页面(targetUrls),而这些页面要登录才能进行访问.那么requests能够提供一种相当简单的语法来实现.

不过在此之前,你得先通过浏览器的开发人员工具确定:

1.递交用户名和密码的页面(loginUrl)

2.键值对(递交数据是以字典的形式)

模拟举例:

#确定登录页面地址和键值对
loginUrl = "http://..."
loginData={
'formhash' : "f474a8c6",
'cookietime' : 2592000,
'loginfield' : "username",
'username' : "...",
'password' : "...",
'userlogin' : "true",} s = requests.session()
s.post(url=loginUrl,data=loginData) #定义目标页面的集合
targetUrls=["http://...","http://...",...] #依次处理这些目标页面
for x in targetUrls:
r=s.get(x)
#对r进行各种读取操作,例如r.content返回网站bytes数据,r.text返回网站Unicode数据.

注意,如果你要用中文正则匹配一个gb编码系的页面文本(r.text),那么你可能需要在匹配之前告诉requests,编码是gb系.即:

for x in targetUrls:
r=s.get(x)
r.encoding='gb18030'

否则,你的正则可能无法匹配到本应匹配到的中文字符.目前还不太了解为何requests顽固的认为页面编码都是ISO-8859-1(西欧编码),即使它已经知道apparent_encoding的值为'GB2312'.

.

requests把服务器返回的数据包装成一个对象,这个对象有很多有用的属性,我们可以直接访问,非常方便.

可算是没有浪费那么多时间去安装.来看看r都有些什么属性:

attrs=['apparent_encoding', 'close', 'connection',  'cookies', 'elapsed',
'encoding','headers', 'history', 'iter_content', 'iter_lines',
'json', 'links', 'ok', 'raise_for_status', 'raw', 'reason',
'request', 'status_code', 'url']
for att in attrs:
print (att,'->',getattr(r,att))
#text和content其实就是网站文本,太大了,单独列出来,只显示类型.
print('type(r.text)','->',type(r.text))
print('type(r.content)','->',type(r.content))

结果:

>>>
apparent_encoding -> GB2312
close -> <bound method Response.close of <Response [200]>>
connection -> <requests.adapters.HTTPAdapter object at 0x01D5F4F0>
cookies -> <<class 'requests.cookies.RequestsCookieJar'>[]>
elapsed -> 0:00:00.758043
encoding -> ISO-8859-1
headers -> CaseInsensitiveDict({'x-powered-by': 'PHP/5.2.17', 'date': 'Sun, 24 Nov 2013 16:31:04 GMT', 'keep-alive': 'timeout=5, max=100', 'content-encoding': 'gzip', 'content-type': 'text/html', 'connection': 'Keep-Alive', 'server': 'LiteSpeed', 'vary': 'Accept-Encoding, Accept-Encoding', 'transfer-encoding': 'chunked'})
history -> []
iter_content -> <bound method Response.iter_content of <Response [200]>>
iter_lines -> <bound method Response.iter_lines of <Response [200]>>
json -> <bound method Response.json of <Response [200]>>
links -> {}
ok -> True
raise_for_status -> <bound method Response.raise_for_status of <Response [200]>>
raw -> <requests.packages.urllib3.response.HTTPResponse object at 0x02622750>
reason -> OK
request -> <PreparedRequest [GET]>
status_code -> 200
url -> http://...
type(r.text) -> <class 'str'>
type(r.content) -> <class 'bytes'>

requests官方中文教程:

http://cn.python-requests.org/en/latest/user/quickstart.html

Python 3.3.3 使用requests模拟登录网站的更多相关文章

  1. Python requests模拟登录

    Python requests模拟登录 #!/usr/bin/env python # encoding: UTF-8 import json import requests # 跟urllib,ur ...

  2. 【爬虫】python requests模拟登录知乎

    需求:模拟登录知乎,因为知乎首页需要登录才可以查看,所以想爬知乎上的内容首先需要登录,那么问题来了,怎么用python进行模拟登录以及会遇到哪些问题? 前期准备: 环境:ubuntu,python2. ...

  3. [Python] 模拟登录网站(。。为了之后操作数据。。)

    我司的内部管理(Web)系统(日报)着实..(mafan).. 所以,就想自己动手增加一下便利性. 计划是, - 桌面程序 用来方便记录(按自己格式,数据随时保存到sqlite中,备用) 通过一览来确 ...

  4. Python爬虫初学(三)—— 模拟登录知乎

    模拟登录知乎 这几天在研究模拟登录, 以知乎 - 与世界分享你的知识.经验和见解为例.实现过程遇到不少疑问,借鉴了知乎xchaoinfo的代码,万分感激! 知乎登录分为邮箱登录和手机登录两种方式,通过 ...

  5. python爬虫【实战篇】模拟登录人人网

    requests 提供了一个叫做session类,来实现客户端和服务端的会话保持 使用方法 1.实例化一个session对象 2.让session发送get或者post请求 session = req ...

  6. python3-使用requests模拟登录网易云音乐

    # -*- coding: utf-8 -*- from Crypto.Cipher import AES import base64 import random import codecs impo ...

  7. python3 模拟登录网站

    最近学习python,因经常登录公积金网站查看公积金缴存还款情况,so网上找了写脚本,修改了一下,方便获取网页中的数据. 使用谷歌浏览器F12查看登录请求内容 1.request header需要参数 ...

  8. python网络爬虫之使用scrapy自动登录网站

    前面曾经介绍过requests实现自动登录的方法.这里介绍下使用scrapy如何实现自动登录.还是以csdn网站为例. Scrapy使用FormRequest来登录并递交数据给服务器.只是带有额外的f ...

  9. python requests 模拟登陆网站,抓取数据

    抓取页面数据的时候,有时候我们需要登陆才可以获取页面资源,那么我们需要登陆以后才可以跳转到对应的资源页面,那么我们需要通过模拟登陆,登陆成功以后再次去抓取对应的数据. 首先我们需要通过手动方式来登陆一 ...

随机推荐

  1. 热力图heatmap.js使用中的思路解析

    官网: https://www.patrick-wied.at/static/heatmapjs/ 需求:使用heatmap.js制作热力图,反映人群分布情况 问题:热力图需要的数据:坐标 + 人数 ...

  2. 机器学习基石:16 Three Learning Principles

    三个理论上界: 三个线性模型: 三个关键工具: 三条学习规则: 1.奥卡姆剃刀定律 先从简单模型开始, 训练后出现欠拟合, 再尝试复杂点模型. 2.采样误差 训练.验证.测试数据尽量同分布. 3.数据 ...

  3. LoadRunner菜鸟入门学习笔记

    一.LR版本及浏览器选择 1.首先百度了一下LR各版本的浏览器兼容性 8.0 最高ie6 8.1 最高ie6 9.0 最高ie7 9.5 最高ie8 11.0 最高ie9( win7 32位+LR11 ...

  4. [HNOI 2010]Bounce 弹飞绵羊

    Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...

  5. 51nod 1035:最长的循环节

    1035 最长的循环节 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题   正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求< ...

  6. VK Cup 2017 - Квалификация 1

    CF上的VK Cup 2017资格赛1,好像很水,因为只有俄文所以语言是最大的障碍--不过之后正式赛貌似就有英文了.(比赛貌似只有开俄文模式才看的到--) 时长1天,不随时间扣分.FallDream ...

  7. hdu 4578 线段树(标记处理)

    Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others) ...

  8. 2015 ICL, Finals, Div. 1 Ceizenpok’s formula(组合数取模,扩展lucas定理)

    J. Ceizenpok’s formula time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  9. C语言程序设计第二次作业——

    1,编译过程过程中的错误缺引号和分号并且拼写错误. 正确结果: 2,编译过程 改正错误: 正确结果: 3,利用SIZEOF运算符求出的数据类型所占字节大小: 4,在头文件LIMITS.H中相关的编译 ...

  10. 手写JAVA虚拟机(二)——实现java命令行

    查看手写JAVA虚拟机系列可以进我的博客园主页查看. 我们知道,我们编译.java并运行.class文件时,需要一些java命令,如最简单的helloworld程序. 这里的程序最好不要加包名,因为加 ...