爬虫入门到精通-网页的下载

本文章属于爬虫入门到精通系统教程第四讲

在爬虫入门到精通第二讲中,我们了解了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,因为比较快)

  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. 打开要爬取的网页
  2. 打开开发者工具,并让请求重发一次(简单讲就是抓包)
  3. 找到正确的请求
  4. 用程序模拟发送

第二个案列:点赞

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(抓知乎登录的包会用到)

本文分享自微信公众号 - Python爬虫分享(python_crawler)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-04-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Felix的技术分享

使用TraceView工具定位耗时操作

23240
来自专栏老马寒门IT

05-移动端开发教程-CSS3兼容处理

CSS3的标准并没有全部定稿,目前CSS3的标准分成了不同的模块,具体的标准由各个模块推动标准和定稿,标准制定的过程中,浏览器也在不断的发新的版本来兼容新的标准...

25060
来自专栏Felix的技术分享

在macOS 10.12 上编译 Android 5.1

30040
来自专栏Web项目聚集地

IDEA入门级教程(文末常用快捷键)

IDEA相对于eclipse来说最大的优点就是它比eclipse聪明。聪明到什么程度呢?我们先来看几个简单的例子。

16730
来自专栏前端儿

前端代码乱糟糟?是时候引入代码质量检查工具了

为了统一团队的代码规范,除了一纸规范说明之外,还需要引入工具进行限制。虽说工具并不能完全实现规范中的规则,但至少能够在一定程度上缓解代码不统一的局面。

42010
来自专栏杨建荣的学习笔记

ASM基本配置问题(r5笔记第89天)

ASM自10g开始作为Grid的一部分,对于存储管理层的一个重大变革。重要性和丰富的功能就不多说了,主要的一点,是完全免费的。所以对于高端存储望而却步,而且不希...

28350
来自专栏腾讯NEXT学位

JavaScript全栈开发-工具篇(下)

? 文章目录 ? 四、测试工具 1. 单元测试 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。常见的单元测试工具有: * ...

16120
来自专栏AhDung

【手记】让Fiddler抓取入站请求,或者叫用Fiddler做反向代理

最近在弄公众号开发,除了主动去调公众号接口,还存在公众号后台要反过来调你的情形,攻受转换一线间。对于回调的情况,想要知道对方是怎样来请求的很有必要。此前经常用F...

25830
来自专栏云计算教程系列

优化SEO?提升你的PageSpeed评分吧!

Nginx在处理网页请求时速度非常快,但是默认的Nginx配置也会导致PageSpeed评分降低。Google会将您网站的速度作为确定网站SEO位置的关键因素。

27080
来自专栏性能与架构

linux查看CPU和内存的使用情况

image.png CPU使用情况 通常使用top命令查看CPU的当前状态,如果是多核CPU,也可以看到每核的信息 # top 执行后按数字1,可以显示多个CP...

42770

扫码关注云+社区

领取腾讯云代金券