Python 3.3.3 使用requests模拟登录网站
在模拟登录上,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模拟登录网站的更多相关文章
- Python requests模拟登录
Python requests模拟登录 #!/usr/bin/env python # encoding: UTF-8 import json import requests # 跟urllib,ur ...
- 【爬虫】python requests模拟登录知乎
需求:模拟登录知乎,因为知乎首页需要登录才可以查看,所以想爬知乎上的内容首先需要登录,那么问题来了,怎么用python进行模拟登录以及会遇到哪些问题? 前期准备: 环境:ubuntu,python2. ...
- [Python] 模拟登录网站(。。为了之后操作数据。。)
我司的内部管理(Web)系统(日报)着实..(mafan).. 所以,就想自己动手增加一下便利性. 计划是, - 桌面程序 用来方便记录(按自己格式,数据随时保存到sqlite中,备用) 通过一览来确 ...
- Python爬虫初学(三)—— 模拟登录知乎
模拟登录知乎 这几天在研究模拟登录, 以知乎 - 与世界分享你的知识.经验和见解为例.实现过程遇到不少疑问,借鉴了知乎xchaoinfo的代码,万分感激! 知乎登录分为邮箱登录和手机登录两种方式,通过 ...
- python爬虫【实战篇】模拟登录人人网
requests 提供了一个叫做session类,来实现客户端和服务端的会话保持 使用方法 1.实例化一个session对象 2.让session发送get或者post请求 session = req ...
- python3-使用requests模拟登录网易云音乐
# -*- coding: utf-8 -*- from Crypto.Cipher import AES import base64 import random import codecs impo ...
- python3 模拟登录网站
最近学习python,因经常登录公积金网站查看公积金缴存还款情况,so网上找了写脚本,修改了一下,方便获取网页中的数据. 使用谷歌浏览器F12查看登录请求内容 1.request header需要参数 ...
- python网络爬虫之使用scrapy自动登录网站
前面曾经介绍过requests实现自动登录的方法.这里介绍下使用scrapy如何实现自动登录.还是以csdn网站为例. Scrapy使用FormRequest来登录并递交数据给服务器.只是带有额外的f ...
- python requests 模拟登陆网站,抓取数据
抓取页面数据的时候,有时候我们需要登陆才可以获取页面资源,那么我们需要登陆以后才可以跳转到对应的资源页面,那么我们需要通过模拟登陆,登陆成功以后再次去抓取对应的数据. 首先我们需要通过手动方式来登陆一 ...
随机推荐
- MongoDB最佳实践中文手册
背景:查阅了一下MongoDB的相关文档,发现中文文档还是比较少的,工作中需要用到MongoDB,而这本<MongoDB最佳实践>是很好的选择,所以就把这本手册翻译了一下,其中生涩的专业用 ...
- HTML笔记05------AJAX
AJAX初探01 AJAX概念 概念:即"Asynchronous JavaScript And XML" 通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新.这意 ...
- [LeetCode] Find Smallest Letter Greater Than Target 找比目标值大的最小字母
Given a list of sorted characters letters containing only lowercase letters, and given a target lett ...
- [LeetCode] The Maze III 迷宫之三
There is a ball in a maze with empty spaces and walls. The ball can go through empty spaces by rolli ...
- 报错django.db.migrations.exceptions.InconsistentMigrationHistory
Pycharm强大的功能总是让我很是着迷,比如它的makemigrations 和 migrate. 然而某一次,当我再次敲下这熟悉的命令时,它报错了.... Traceback (most rece ...
- Mysql之单表记录查询
数据记录查询: 1.简单数据记录查询: select * from table_name; select allfield from table_name; select distinct(属性名) ...
- Shiro加密
在开发的时候,很多数据我们都希望是以加密过后的形式存储起来,而不是最原始的数据. 在shiro中也提供了编码,解码,加密,加密算法实现等等一系列的内容. 编码/解码 在org.apache.shiro ...
- HttpClient入门三
我们在爬取网页的时候,由于需要不断的访问目标服务器,因此给目标服务器带来了很多的压力. 因此,很多访问量大的服务器都会有保护措施,如果检测到我们的行为,可以会禁止我们的ip访问. 这个时候,我们就需要 ...
- [ZJOI 2014]力
Description 给出n个数qi,给出Fj的定义如下: $$F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_{i>j}\frac{q_i ...
- [BZOJ]1093 最大半连通子图(ZJOI2007)
挺有意思的一道图论. Description 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:∀u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v ...