[Python 爬虫这样学,一定是大拇指拉!] DAY27 - 实战演练:重复使用 TCP 连线

重复使用 TCP 连线

本篇章请搭配以下一起服用:

不知道各位还记不记得 HTTP 的特性,就是每次的连线都是独立的连线。
所以像前一篇多执行绪 - 抓取多个个股收盘价,明明我们是连续对同一个 domain 送 request,却每次都得重新建立新连线(重新三方交握)。这样当连线量大时,效能也会变差。所以有没有解决办法呢?

有解决办法!就是使用 Requests 套件里的 Session 物件!

引用自官方文件

The Session object allows you to persist certain parameters across requests. It also persists cookies across all requests made from the Session instance, and will use urllib3’s connection pooling. So if you’re making several requests to the same host, the underlying TCP connection will be reused, which can result in a significant performance increase (see HTTP persistent connection).

意思是说 Session 这个类别,有提供 TCP 连线能被重复利用(同个 host 才能让连线被重复利用)的功能,避免一直重新建立新连线。

举例来说:

# 原本是直接使用 requests,现在变成先建立一个 Session 物件,使用这个物件的方法
# 而 Session 物件所提供的方法跟 requests 一模一样
req_session = requests.Session()

req_session.get("https://www.example.com/page1")
req_session.get('https://www.example.com/page2')

# 虽然是透过同个 Session 物件送 request,但由於是不同 host 所以会重新建立新连线
req_session.get('https://www.anotherdomain.com/page2')

我们利用上一篇多执行绪 - 抓取多个个股收盘价的程序码来实验看看。

未套用 Session 物件的情况:
https://ithelp.ithome.com.tw/upload/images/20211012/201393582AqZmYOoXX.png

每次连线就是重新 new 一个 connection。

套用 Session 物件後:
https://ithelp.ithome.com.tw/upload/images/20211012/20139358BP84Qb7hnL.png

同个 host 的情况只会 new 一次 connection。

这样一来不断重新建立新连线的问题解决了!

以上就是重复使用 TCP 连线的介绍!


<<:  Day 27 : 插件篇 06 — 建立一套完整的笔记复习流程,使用 Obsidian 插件 Spaced Repetition

>>:  【Day27】Git 版本控制 - Stash 暂存

Day27-Alpine.js vs Vue.js浅谈(4)

今天要来介绍Alpine.js和Vue.js的双向资料绑定, 这是非常实用的东西呢, 它可以使输入的...

Progressive Web App 透过系统分享内容: Web Share API & Web Share Target (17)

什麽是 Web Share API Web App 透过 Web Share API 就能够使用系统...

[Day1] Jetpack Compose: 初始化的Project有什麽东西?

环境设定: 先去 https://developer.android.com/studio 下载An...

从零开始-30日练习开发iOS APP-铁人赛心得 Day-30

从七月暑假开始触碰到 Swift,其实也说长不长说短不短,每天练习各式各样的 UI元件,或是有时需要...

Day11 iPhone捷径-媒体Part1

Hello 大家, 明明是普通的周末, 不知为何这周一堆人出去玩@@ 我错过了甚麽吗? 今天来讲媒体...