首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >爬虫入门到精通-headers的详细讲解(If-modified-since)

爬虫入门到精通-headers的详细讲解(If-modified-since)

作者头像
爬虫
发布2018-04-08 11:58:04
1.2K0
发布2018-04-08 11:58:04
举报
文章被收录于专栏:Python与爬虫Python与爬虫

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

本文讲解的知识点是headers里面的If-modified-since

直接开始案例把

本次我们要抓取的内容是苹果应用商店里面的所有app 从 iTunes 下载的 App Store

当我第一次打开王者荣耀:在 App Store 上的内容(http://link.zhihu.com/?target=https%3A//itunes.apple.com/cn/app/%25E7%258E%258B%25E8%2580%2585%25E8%258D%25A3%25E8%2580%2580/id989673964)网页的时候,再次刷新的时候,你会看到http状态码返回 304

那么知道了这个http状态码304对我们爬虫有什么用呢?

当我需要每天的爬取苹果应用商店的app的时候,因为苹果app很多,所以每次如果我全部爬取的话,会花费很多的时间,其实我只要抓取有更新的内容就好了。那么http状态码304就派上用场了。

看代码把

import requests

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}

url = 'https://itunes.apple.com/cn/app/%E7%8E%8B%E8%80%85%E8%8D%A3%E8%80%80/id989673964'

z = requests.get(url,headers=headers)
# 获取上次修改时间
last_modified = z.headers['Last-Modified']

# 修改headers
headers['If-Modified-Since'] = last_modified

方法1

z1 = requests.get(url,headers=headers)
print z1.status_code
#304
#可以看到已经返回状态码304,表示网页没有更新

方法2

z2 = requests.head(url,headers=headers)
if z1.headers['Last-Modified'] == last_modified:
    print u'网页没有更新'
#这种方法也可以知道网页是否有更新

总结

那么假如我要每天爬取苹果应该商店的app,那么我会在第一次请求的时候吧每个网页的上次修改时间存到数据库(也就是If-Modified-Since)

然后在我第二次爬取的时候,我会把上次存到数据库的时间放到headers里面,如果http状态码返回304,则表示网页没有更新,我可以不用再次解析网页,这样会节约大量时间…

最后代码在 http://link.zhihu.com/?target=https%3A//github.com/kimg1234/pachong/blob/master/If-modified-since.ipynb

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python爬虫分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 直接开始案例把
  • 看代码把
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档