爬虫入门到精通-网页的下载
本文章属于爬虫入门到精通系统教程第四讲
在爬虫入门到精通第二讲中,我们了解了HTTP协议
http://mp.weixin.qq.com/s?__biz=MzU2OTAxNTcwMw==&mid=100000021&idx=1&sn=86d3595456c4736d0e2e79bc31ca063f&chksm=7c846ded4bf3e4fb886d6a6cc4a0176569fbb9ce5e8c6276ee02c889dd24606d685c9c6747a2#rd,那么我们现在使用这些协议来快速爬虫吧
本文的目标
当你看完本文后,你应该能爬取(几乎)任何的网页
使用chrome抓包
抓包(packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全。抓包也经常被用来进行数据截取等。
第一个案列:抓取轮子哥的动态(https://www.zhihu.com/people/excited-vczh/activities)
1.打开轮子哥动态这个网页
2.打开抓包工具
- 点击F12打开开发者工具
- 点击Network(或者网络)
- 按F5刷新下页面(主要是让请求重发一次,这样就能抓到包了)
应该会看到如下界面
3.找到我们需要的请求
可以看到如下截图,里面有这么多的请求,那么到底哪一个才是我们需要的呢 ?
这边提供一个小技巧
- 当你要抓的包是需要按F5刷新才出来的,一般我们需要的请求都在DOC里面(整个页面有刷新)
- 当你要抓的包是点击按钮"加载更多"(或者拖到页面最下面会自动加载的,整个页面并没有刷新)一般我们需要的请求都在XHR里面
简单来讲就是如果整个页面没有刷新的话,那就是在XHR里面,否则在DOC里面
因为本次抓包整个页面有刷新,所以,我们需要找的请求在DOC下面,可以看到只有一个请求
4.验证请求是对的
有以下两种方法(基本上用1,因为比较快)
- 在我们要抓包的页面随便copy出几个字,在Respoinse中使用ctrl+f 查找,如果有找到,说明我们找到的是对的 (我查找的是"和微软粉丝谈")
2.把response中所有的内容复制到一个txt中,并改名为"#.html"(这里的#可以随便取)
然后打开这个html,看看是否和我们要抓的一样
如果发现要找的不对,那你可以打开下一个请求检查下
5.模拟发送
点击Headers
可以看到请求的url是: https://www.https://www.zhihu.com/people/excited-vczh/activities
方法是: GET
requests headers 是(下图中框出来的地方)
所以我们的代码应该是:
import requests# 这里的headers就是我们上图框中的headers
request_headers = {
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate, sdch, br','Accept-Language':'zh-CN,zh;q=0.8','Cache-Control':'max-age=0','Connection':'keep-alive','Cookie':'','Host':'www.zhihu.com','Referer':'https://www.zhihu.com/','Upgrade-Insecure-Requests':'1','User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
}
#上图中的url
url = "https://www.zhihu.com/people/excited-vczh/activities"
# 上图中的请求方法(get)
z = requests.get(url,headers=request_headers)
print z.content
这段代码简单来说就是把 我们抓包看到的用程序来实现
一个小总结
我们爬取一个网页的步骤可以分为如下:
- 打开要爬取的网页
- 打开开发者工具,并让请求重发一次(简单讲就是抓包)
- 找到正确的请求
- 用程序模拟发送
第二个案列:点赞
1.打开要爬取的网页
我们打开 "https://www.zhihu.com/"
我们要点赞的回答是这个
2.打开开发者工具,并让请求重发一次
打开后"点击赞一下",可以看到有好多请求
3.找到正确的请求
我们一个一个的点开请求看,发现就一个有返回值,而且这个返回值没有意义,那么怎么确定这个就是我们要找的呢?
我们可以点击Headers,看一下发送的参数
vote_up 很明显,就是点赞的意思。所以这个应该就是我们要找的。
这边说一下,右边"Headers,Preview,Response,Cookies,Timing"是什么意思
我们经常要看的有,headers 和 preview
headers 里面我们都有介绍过(请求头,返回头)
preview和response里面的内容是相同的(preview里面的内容格式化了,输出的好看一些),里面的内容是html返回值
cookies 里面是cookie的值,只不过分成了key value的形式
Timing基本用不上,所以也不介绍了(想了解的话可以自己百度...)
4.用程序模拟发送
我们把headers全部copy,
url也和上面一样
参数也是对的
请求方法是post
但是发现最终返回http code 400,这是为什么呢?
让我们留到下一篇文章~
最后再次总结一下
看完本篇文章后,你应该要
- 能学会抓包
最后大家可以抓一下知乎登录的包哦~
小提示:当你要抓的网页是会自动跳转的话,那么你需要选中“proserve log”
意思是不要在页面重新加载后清除log(抓知乎登录的包会用到)
- 在ASP.NET MVC5应用程序中快速接入QQ和新浪微博OAuth起步创建应用程序使用NUGET更新OWIN中间件启动SSL支持申请腾讯QQ的Oauth申请新浪微博的Oauth快速接入资源地址&源码
- 有趣的算法(六) ——Find-Union算法
- 有趣的算法(七) ——快速排序改进算法
- 编写你人生中第一个机器学习代码吧!
- 使用Octave来学习Machine Learning(二)
- RESTful API的十个最佳实践1. 使用名词而不是动词 2. Get方法和查询参数不应该改变资源状态3. 使用名词的复数形式 4. 为关系使用子资源 5. 使用HTTP头决定序列化格式 6. 使
- MYSQL数据库设计的一些小技巧[转载]
- 在ASP.NET 5应用程序中的跨域请求功能详解什么是“同域”添加CORS包在应用程序中配置CORSCORS策略选项跨域请求中的凭据设置先行请求的过期时间CORS是怎么样工作的先行请求
- 有趣的算法(八) ——红黑树插入算法
- 使用Donut Caching和Donut Hole Caching在ASP.NET MVC应用中缓存页面何时使用Donut CachingDonut Caching 的Nuget 包Donut Ho
- 有趣的算法(九) ——蛇形数组
- 有趣的算法(十一) ——分治法:快速求最值
- ASP.NET AJAX(3)__UpdatePanel
- 正则表达式学习笔记
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法