Python for Infomatics 第12章 網路編程一(譯)

来源:http://www.cnblogs.com/zhengsh/archive/2016/04/22/5392744.html
-Advertisement-
Play Games

註:以下文章原文來自於Dr Charles Severance 的 《Python for Informatics》 本書中的許多例子關註的是讀取文件並查找數據,但在互聯網中還有許多不同信息源。 本章我們將偽裝成瀏覽器用超文本傳送協議(HTTP)從網站獲取網頁,通讀並分析它。 12.1 超文本傳送協 ...


註:以下文章原文來自於Dr Charles Severance 的 《Python for Informatics》

  本書中的許多例子關註的是讀取文件並查找數據,但在互聯網中還有許多不同信息源。

  本章我們將偽裝成瀏覽器用超文本傳送協議(HTTP)從網站獲取網頁,通讀並分析它。

12.1 超文本傳送協議-HTTP

  支撐網頁運轉的網路協議實際非常簡單,在Python中內置了套接字(socket)模塊,使得使用套接字創建網路連接並獲取數據變得非常容易。

  套接字最很像文件,可以對它進行讀寫,但它還提供在兩個程式間進行雙向連接。如果你向套接字寫信息,它將把信息發送另一端程式對應的套接字上,如果你讀取信息,你得到的將是對端程式發送的信息。

  但是當你在對端未發送信息時去讀套接字,那麼你就只有坐乾等了。如果兩端的套接字都在接收數據而未發送數據,那麼它們將等上很長一段時間。
  所以程式中用於互聯網通信的重要部分必須有某種協議。協議是一個定義誰先發、發的消息要乾什麼、怎麼響應這個消息、誰接著發等的準確規則的集合。在某種意義上,兩端應用程式好像在跳舞,並且確保不要踩到對方的腳趾上。

  關於這些網路協議的文檔有很多,超文本傳送協議RFC2616鏈接如下:

http://www.w3.org/Protocols/rfc2616/rfc2616.txt

  這個176頁又長又複雜的文檔有很多細節信息,如果你感興趣你可以通讀它。如果你翻看第36頁,你會發現GET請求的語法。你仔細閱讀,你會發現從一個網站請求獲取一個文檔,我們需要先和網站建立套接字連接,然後再發送GET請求。例如我們在80埠和www.py4inf.com伺服器建立連接,然後發送以下格式的請求:

GET http://www.py4inf.com/code/romeo.txt HTTP/1.0

  其中第二個參數是我們請求的網頁,然後我們再發送一個空行。網頁伺服器將響應發送這個網頁的頭信息、文檔內容和一個緊跟其後的空行。

 12.2 世界上最簡單的瀏覽器

  也許顯示HTTP協議如何工作的最簡單方法就是寫一個非常簡單的Python程式,它將和網頁伺服器建立連接,並遵循HTTP協議規則,請求一個文檔,然後在伺服器送回後進行顯示。代碼如下:

 

import socket
mysock = socket.socket(socket.AF_INET, socket.SOCKET_STREAM)
mysock.connect(('www.py4inf.com', 80))
mysock.send(b'Get http://www.py4inf.com/code/romeo.txt HTTP/1.0\n\n')
while True:
    data = mysock.recv(512).decode('utf-8')
    if (len(data) < 1):
        break
    print (data)
mysock.close()

程式的輸出如下:

HTTP/1.1 200 OK
Date: Fri, 22 Apr 2016 15:21:42 GMT
Server: Apache
Last-Modified: Fri, 04 Dec 2015 19:05:04 GMT
ETag: "e103c2f4-a7-526172f5b5d89"
Accept-Ranges: bytes
Content-Length: 167
Cache-Control: max-age=604800, public
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: origin, x-requested-with, content-type
Access-Control-Allow-Methods: GET
Connection: close
Content-Type: text/plain

But soft what light through yonder window breaks
It is the east and Juliet is the sun
Arise fai
r sun and kill the envious moon
Who is already sick and pale with grief

  輸出的開頭是網頁伺服器發送的描述這個文檔的頭信息。例如內容類型頭表示這個文檔時純文本文件(text/plain)。

  在頭文件之後,伺服器發送了一個空行,表示頭文件結束。然後發送romeo.txt的實際數據。

  這個例子展示瞭如何用套接字創建一個底層的網路連接。套接字可以和網頁伺服器、郵件伺服器或其它許多類型的伺服器通信。你要做就是找到描述這個協議的文檔,然後依據協議編寫發送和接收的代碼。

  因為我們用得最多的是HTTP協議,所以在Python有一個專門設計,用來支持HTTP協議的特定庫,用來檢索網上的文檔和數據。
  下一節將介紹這個庫。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • #include<stdio.h>int main(){ int i,j; int word=0,num=0;//新單詞標記,單詞下標 char str[100],s[50][20]={0},c; gets(str);//輸入字元串(多個單詞) for(i=0;(c=str[i])!='\0';i+ ...
  • 問題描述: Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maxim ...
  • 一丶可命名元組(nametuple) ...
  • 1.include語句 使用include語句可以告訴PHP提取特定的文件,並載入它的全部內容 1 <?php 2 inlude "fileinfo.php"; 3 4 //此處添加其他代碼 5 ?> 使用include語句可以告訴PHP提取特定的文件,並載入它的全部內容 1 <?php 2 inl ...
  • 命名空間其實只是一個形式,最終目的是重構代碼,但這個過程想要一蹴而就是不可能的。 一開始給了一個偽命題:基於ThinkPHP的重構(不要為什麼)。經過一段的實踐,發現這是一個大錯特錯的思維方式,其中遇到的坑在此略過不表。 首先,不要想著全盤基於命名空間重寫,而應該是基於局部的。 最終思考後的結果,是 ...
  • 在上一篇《java事務(二)——本地事務》中已經提到了事務的類型,並對本地事務做了說明。而分散式事務是跨越多個數據源來對數據來進行訪問和更新,在JAVA中是使用JTA(Java Transaction API)來實現分散式的事務管理的。但是在本篇中並不會說明如何使用JTA,而是在不依賴其他框架以及j ...
  • HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是網際網路上應用最為廣泛的一種網路傳輸協議,所有的WWW文件都必須遵守這個標準。 HTTP是一個基於TCP/IP通信協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。 HTTP協議工作於客戶端-服務端架構為 ...
  • atitit.詞法分析原理 詞法分析器 (Lexer) 1. 詞法分析(英語:lexical analysis)1 2. ;實現詞法分析程式的常用途徑:自動生成,手工生成.[1] 2 2.1. 詞法分析程式的功能2 2.2. 如何描述詞素3 2.3. 單詞token3 2.4. Token的類型,根 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...