官术网_书友最值得收藏!

6.4 下載與上傳

下載文件主要從服務器獲取文件內容,然后將內容保存到本地。下載文件的方法如下:

代碼變量url是一個圖片文件URL地址,對文件所在URL地址發送請求(大多數是GET請求方式);服務器將文件內容作為響應內容,然后將得到的內容以字節流(Bytes)格式寫入自定義文件,這樣就能實現文件下載。

除了文件下載外,還有更為復雜的文件上傳,文件上傳是將本地文件以字節流的方式上傳到服務器,再由服務器接收上傳內容,并做出相應的響應。文件上傳存在一定的難度,其難點在于服務器接收規則不同,不同的網站接收的數據格式和數據內容會不一致。下面以發送圖片微博為例進行介紹。

(1)在瀏覽器中輸入https://weibo.cn/,在網頁上單擊“高級”按鈕并使用Fiddler抓包工具(由于發送微博時,網頁發生302跳轉,因此使用Chrome會清空請求信息,導致抓取難度較大)。

(2)單擊“選擇文件”,選擇圖片文件并輸入發布內容“Python爬蟲”,最后單擊“發布”按鈕發布微博。查看Fiddler抓取的請求信息,如圖6-2所示。

圖6-2 Fiddler抓取的請求信息

從圖6-2得知,該請求方式是POST, QueryString是POST的請求參數data, Content-type是上傳文件,三個Content-Disposition分別對應發布內容、發布圖片和設置分組可見。代碼實現如下:

POST數據對象是以文件為主的,上傳文件時使用files參數作為請求參數。Requests對提交的數據和文件所使用的請求參數做了明確的規定。

參數files也是以字典形式傳遞的,每個Content-Disposition為字典的鍵值對,Content-Disposition的name為字典的鍵,value為字典的值。

此外,不同的網站設置對files參數的設置也是不一樣的,下面列出較為常見的上傳方法:

主站蜘蛛池模板: 土默特左旗| 溆浦县| 昭通市| 宁明县| 晋州市| 东丰县| 武清区| 射阳县| 铜梁县| 师宗县| 临安市| 大同市| 中江县| 石屏县| 垦利县| 镇远县| 金坛市| 合阳县| 来宾市| 巩留县| 临澧县| 万载县| 怀安县| 阿巴嘎旗| 化德县| 敦煌市| 老河口市| 温宿县| 集安市| 县级市| 顺昌县| 南京市| 胶州市| 海宁市| 札达县| 邮箱| 旌德县| 重庆市| 武穴市| 太原市| 保康县|