Python爬虫(2):Coursera抓站小结
admin
2023-07-31 00:46:31
0

继豆瓣抓站后再对Coursera下手

系统: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的处理,使用以下方法

12345 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方法对应的头部.

找到POST方法

找到POST方法

表单处理

表单处理

12345 form_data = urllib.urlencode({  #注意urlencode方法    \”email\”: self.user_name,    \”password\”: self.password,    \”webrequest\”: \”true\”})

0.3. 防盗链和伪装成浏览器访问

防盗链就是需要在请求的头部加入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, #伪装成浏览器访问}

1. 伪装头部

使用谷歌浏览器自带的开发者工具, 选择Network(Element用来查看网站源码等功能), 获取详细的GET和POST方法, 从中获取登录请求的的头部信息,
从POST中获得Headers信息如下(省略部分不重要信息)

12345678910111213141516171819202122 Request URL:https://accounts.coursera.org/api/v1/login  //真正的登陆验证页面Request Method:POSTStatus Code:401 Unauthorized //Request HeadersConnection:keepaliveContentLength:55ContentType:application/xwwwformurlencodedCookie:(省略cookie信息, 下面详细介绍)...Referer:https://accounts.coursera.org/signin //防盗链设置UserAgent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36  //浏览器浏览标识//下面四行为服务器所做的限制字段XCSRF2Cookie:csrf2_token_el67QDLgXCSRF2Token:1oxZDVMuZGX0qCggdReQyj2RXCSRFToken:WnVtiMDpvw0JXJqHjPrFk0EUXRequestedWith: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的处理,使用以下方法

12345 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方法对应的头部.

找到POST方法

找到POST方法

表单处理

表单处理

12345 form_data = urllib.urlencode({  #注意urlencode方法    \”email\”: self.user_name,    \”password\”: self.password,    \”webrequest\”: \”true\”})

0.3. 防盗链和伪装成浏览器访问

防盗链就是需要在请求的头部加入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, #伪装成浏览器访问}

1. 伪装头部

使用谷歌浏览器自带的开发者工具, 选择Network(Element用来查看网站源码等功能), 获取详细的GET和POST方法, 从中获取登录请求的的头部信息,
从POST中获得Headers信息如下(省略部分不重要信息)

12345678910111213141516171819202122 Request URL:https://accounts.coursera.org/api/v1/login  //真正的登陆验证页面Request Method:POSTStatus Code:401 Unauthorized //Request HeadersConnection:keepaliveContentLength:55ContentType:application/xwwwformurlencodedCookie:(省略cookie信息, 下面详细介绍)...Referer:https://accounts.coursera.org/signin //防盗链设置UserAgent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36  //浏览器浏览标识//下面四行为服务器所做的限制字段XCSRF2Cookie:csrf2_token_el67QDLgXCSRF2Token:1oxZDVMuZGX0qCggdReQyj2RXCSRFToken:WnVtiMDpvw0JXJqHjPrFk0EUXRequestedWith:XMLHttpRequest //Form Dataemail:1095…@qq.com //Coursera账户信息 password:FAFA  //账户密码webrequest:true //固定字段

这样就能写出模拟头部的函数

123456789101112131415 def structure_headers(self) :        #模拟表单数据,这个参数不是字典        form_data = urllib.urlencode({            \”email\”: self.user_name,

上一篇:Python yield与实现

下一篇:python 装饰器

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...