爬蟲入門到精通-headers的詳細講解(If-modified-since)
本文章屬於爬蟲入門到精通系統教程第九講
本文講解的知識點是headers裡面的If-modified-since
直接開始案例把
本次我們要抓取的內容是蘋果應用商店裡面的所有app 從 iTunes 下載的 App Store
當我第一次打開王者榮耀:在 App Store 上的內容網頁的時候,再次刷新的時候,你會看到http狀態碼返回 304
那麼知道了這個http狀態碼304對我們爬蟲有什麼用呢?
當我需要每天的爬取蘋果應用商店的app的時候,因為蘋果app很多,所以每次如果我全部爬取的話,會花費很多的時間,其實我只要抓取有更新的內容就好了。那麼http狀態碼304就派上用場了。
看代碼把
import requestsnnheaders = {User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36}nnurl = https://itunes.apple.com/cn/app/%E7%8E%8B%E8%80%85%E8%8D%A3%E8%80%80/id989673964nnz = requests.get(url,headers=headers)n
# 獲取上次修改時間nlast_modified = z.headers[Last-Modified]nn# 修改headersnheaders[If-Modified-Since] = last_modifiedn
- 方法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,則表示網頁沒有更新,我可以不用再次解析網頁,這樣會節約大量時間...
最後代碼在 kimg1234/pachong
歡迎關注本人的微信公眾號獲取更多Python爬蟲相關的內容
(可以直接搜索「Python爬蟲分享」)
推薦閱讀:
※跟黃哥學python序列文章之python方法鏈(method chaining)
※代碼優化指南:人生苦短,我用Python
※由淺入深寫代理(3) -socks5 代理
※Python數據分析及可視化實例之文本處理文本相似度(29)
※玩點好玩的--知乎全部話題關係可視化(Docker+Flask+Bootstrap+echarts+uWSGI+Nginx)