系统:Mac OS X 10.10.1
编辑器: Sublime Text2
Python版本: 2.7.8
模块依赖: import sys, string, re, random, urllib, urllib2, cookielib, getpass(均为系统内的模块
)
0. 抓站小结
0.1. cookie处理
需要进行登陆的时候, 要进行cookie的处理,使用以下方法
1 2 3 4 5 |
cookie = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) urllib2.install_opener(opener) req = urllib2.Request(url) content = urllib2.urlopen(req) |
0.2. 表单处理
某些网站需要进行账户和密码登陆, 需要使用POST方法向服务器发送账户和密码表单数据, 这里就需要模拟登陆.
如何获取表单数据的格式呢?
通过谷歌浏览器开发者工具中Network锁定请求头部和post发出的表单数据,伪装表单数据
当由于Method太多, 找不到POST提交登录请求Method方法的时候, 可以尝试使用错误密码, 这样就可以容易的找POST方法对应的头部.
1 2 3 4 5 |
form_data = urllib.urlencode({ #注意urlencode方法 "email": self.user_name, "password": self.password, "webrequest": "true" }) |
0.3. 防盗链和伪装成浏览器访问
防盗链就是需要在请求的头部加入Referer
字段, Referer 指的是HTTP头部的一个字段, 用来表示从哪儿链接到目前的网页,采用的格式是URL。换句话说,借着 HTTP Referer 头部网页可以检查访客从哪里而来,这也常被用来对付伪造的跨网站请求。
伪装成浏览器就是将User-Agent设置为浏览器的字段
1 2 3 4 5 6 7 |
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, #伪装成浏览器访问 } |
1. 伪装头部
使用谷歌浏览器自带的开发者工具
, 选择Network
(Element用来查看网站源码等功能
), 获取详细的GET和POST方法, 从中获取登录请求
的的头部信息,
从POST中获得Headers信息如下(省略部分不重要信息
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Request URL:https://accounts.coursera.org/api/v1/login //真正的登陆验证页面 Request Method:POST Status Code:401 Unauthorized //Request Headers Connection:keep-alive Content-Length:55 Content-Type:application/x-www-form-urlencoded Cookie:(省略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_el67QDLg X-CSRF2-Token:1oxZDVMuZGX0qCggdReQyj2R X-CSRFToken:WnVtiMDpvw0JXJqHjPrFk0EU X-Requested-With:XMLHttpRequest //Form Data email:1095...@qq.com //Coursera账户信息 password:FAFA //账户密码 webrequest:true //固定字段 |
这样就能写出模拟头部的函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
def structure_headers(self) : #模拟表单数据,这个参数不是字典 form_data = urllib.urlencode({ "email": self.user_name, /h1>
0.1. cookie处理需要进行登陆的时候, 要进行cookie的处理,使用以下方法
0.2. 表单处理某些网站需要进行账户和密码登陆, 需要使用POST方法向服务器发送账户和密码表单数据, 这里就需要模拟登陆.
通过谷歌浏览器开发者工具中Network锁定请求头部和post发出的表单数据,伪装表单数据
找到POST方法
表单处理
0.3. 防盗链和伪装成浏览器访问防盗链就是需要在请求的头部加入 伪装成浏览器就是将 伪装头部
1. 伪装头部使用
这样就能写出模拟头部的函数
|