继豆瓣抓站后再对Coursera下手
系统:Mac OS X 10.10.1
编辑器: Sublime Text2
Python版本: 2.7.8
模块依赖: import sys, string, re, random, urllib, urllib2, cookielib, getpass(均为系统内的模块
)
需要进行登陆的时候, 要进行cookie的处理,使用以下方法
12345 | cookie = cookielib.CookieJar()opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))urllib2.install_opener(opener)req = urllib2.Request(url)content = urllib2.urlopen(req) |
某些网站需要进行账户和密码登陆, 需要使用POST方法向服务器发送账户和密码表单数据, 这里就需要模拟登陆.
如何获取表单数据的格式呢?
通过谷歌浏览器开发者工具中Network锁定请求头部和post发出的表单数据,伪装表单数据
当由于Method太多, 找不到POST提交登录请求Method方法的时候, 可以尝试使用错误密码, 这样就可以容易的找POST方法对应的头部.
找到POST方法
表单处理
12345 | form_data = urllib.urlencode({ #注意urlencode方法 \”email\”: self.user_name, \”password\”: self.password, \”webrequest\”: \”true\”}) |
防盗链就是需要在请求的头部加入Referer
字段, Referer 指的是HTTP头部的一个字段, 用来表示从哪儿链接到目前的网页,采用的格式是URL。换句话说,借着 HTTP Referer 头部网页可以检查访客从哪里而来,这也常被用来对付伪造的跨网站请求。
伪装成浏览器就是将User-Agent设置为浏览器的字段
伪装头部
1234567 | user_agent = (\”Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) \” \”AppleWebKit/537.36 (KHTML, like Gecko) \” \”Chrome/38.0.2125.111 Safari/537.36\”)request_header = { \”Referer\”: \”https://accounts.coursera.org/signin\”, #对付防盗链设置, 为跳转来源的url \”User-Agent\”: user_agent, #伪装成浏览器访问} |
使用谷歌浏览器自带的开发者工具
, 选择Network
(Element用来查看网站源码等功能
), 获取详细的GET和POST方法, 从中获取登录请求
的的头部信息,
从POST中获得Headers信息如下(省略部分不重要信息
)
12345678910111213141516171819202122 | Request URL:https://accounts.coursera.org/api/v1/login //真正的登陆验证页面Request Method:POSTStatus Code:401 Unauthorized //Request HeadersConnection:keep–aliveContent–Length:55Content–Type:application/x–www–form–urlencodedCookie:(省略cookie信息, 下面详细介绍)...Referer:https://accounts.coursera.org/signin //防盗链设置User–Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 //浏览器浏览标识//下面四行为服务器所做的限制字段X–CSRF2–Cookie:csrf2_token_el67QDLgX–CSRF2–Token:1oxZDVMuZGX0qCggdReQyj2RX–CSRFToken:WnVtiMDpvw0JXJqHjPrFk0EUX–Requested–With:XMLHttpRequest //Form Dataemail:1095…@qq.com //Coursera账户信息 password:FAFA //账户密码webrequest:true //固定字段 |
这样就能写出模拟头部的函数
123456789101112131415 | def structure_headers(self) : #模拟表单数据,这个参数不是字典 form_data = urllib.urlencode({ \”email\”: self.user_name,ʓ站小结
0.1. cookie处理需要进行登陆的时候, 要进行cookie的处理,使用以下方法
0.2. 表单处理某些网站需要进行账户和密码登陆, 需要使用POST方法向服务器发送账户和密码表单数据, 这里就需要模拟登陆.
通过谷歌浏览器开发者工具中Network锁定请求头部和post发出的表单数据,伪装表单数据
找到POST方法 表单处理
0.3. 防盗链和伪装成浏览器访问防盗链就是需要在请求的头部加入 伪装成浏览器就是将 伪装头部
1. 伪装头部使用
这样就能写出模拟头部的函数
|
上一篇:Python yield与实现
下一篇:python 装饰器