P08 Web Crawler#

  • slide for getting json data online

  • Finding data url

  • Scraping 104.com job info

  • Understanding how to send request and get back response

  • Send request with Cookie, payload, Referer…

以下為本章節的目錄:

8.1 網頁與瀏覽器的行為#

  1. 瀏覽器的行為:瀏覽器不論檔案類型,無論是CSV、JSON還是HTML,它的行為都是將檔案下載回來。換句話說,無論你在瀏覽器中訪問的內容是什麼,瀏覽器都會將相關檔案下載到你的設備上以進行後續處理。

  2. HTML 的處理:當瀏覽器遇到HTML檔案時,它會根據HTML和CSS樣式進行排版和渲染,最終呈現給用戶看到的網頁。換句話說,HTML檔案包含了網頁的結構和內容,而CSS則負責網頁的樣式和外觀。

  3. 檔案的本質:無論是CSV、JSON還是HTML,瀏覽器下載的檔案實際上都是文本檔。這表示無論這個檔案的附檔名是什麼,它都可以被視為純文本。你可以打開這個檔案,查看其中的程式碼,從而確定它是CSV、JSON還是HTML。

  4. 處理不同檔案類型

    • 對於CSV檔案,你可以使用.read()方法來讀取內容。這將以文本形式傳回CSV檔案的內容,你可以將其進一步處理為適當的數據結構。

    • 對於JSON檔案,你可以使用.json()方法來讀取內容。這將解析JSON格式的內容並返回對應的數據結構,通常是字典或列表。

    • 對於HTML檔案,你需要使用HTML解析器來剖析內容。這可以通過Python中的庫(例如Beautiful Soup)來實現,它們可以幫助你提取和處理HTML中的元素和數據。

8.2 Request and Response#

當你使用瀏覽器發出一個網路請求(request)時,這個請求通常包含了一些額外的資訊,這些資訊被稱為request header。這些資訊幫助網站伺服器確認請求的合法性並提供更好的服務。以下是關於request和response的更多說明:

Request(請求):

  1. 使用者資訊:當你發出request時,其中包含了一些用戶相關的資訊,例如你使用的瀏覽器類型(User-Agent),這有助於網站伺服器識別你正在使用的瀏覽器和作業系統。

  2. 時間資訊:request中也包含了時間戳記,它告訴伺服器你發出請求的具體時間,這在一些情況下很重要,例如當你需要瀏覽某一時間點的內容。

  3. 位置資訊:有時request也可能包含有關你的位置的資訊,通常是以IP地址的形式提供的,這有助於伺服器提供地理相關的內容或服務。

  4. 裝置資訊:request可能包含了你是使用手機還是電腦等設備的資訊,這有助於網站伺服器優化頁面以適應不同的裝置。

  5. 其他自訂資訊:你也可以在request header中包含其他自訂資訊,這取決於你的需求和網站的要求。

Response(回應):

  1. 伺服器回應:當伺服器收到你的request後,它會發送一個response回來。這個response包含了所請求的內容,無論是網頁內容、圖像、音頻、視頻等。

  2. Cookie:伺服器可以在response中包含一個或多個cookie。這些cookie是小的文本資訊,被存儲在你的瀏覽器中,用於跟蹤你的會話狀態、登入信息等。這樣,你可以保持登入狀態,而不需要每次都重新輸入登入信息。

  3. 其他自訂資訊:response也可以包含其他自訂的header資訊,這些資訊可能包括網站的版本、狀態碼(例如200表示成功,404表示找不到頁面等)等。

8.3 HTTP requests by requests package#

requests 是一個非常常用的Python函式庫,用於發送HTTP請求並與Web服務進行交互。它使你可以輕鬆地向網站伺服器發送GET或POST請求,並處理伺服器的回應。以下是介紹 requests 函式庫的基本指令:

  1. 安裝requests:首先,確保你已經安裝了 requests 函式庫。你可以使用 pip 安裝它:

    pip install requests
    
  2. 匯入requests:在你的Python腳本或Jupyter Notebook中,需要導入 requests 函式庫:

    import requests
    
  3. 發送GET請求:使用 requests.get() 方法可以向指定的URL發送GET請求,並獲取伺服器的回應。例如:

    response = requests.get('https://example.com')
    
  4. 檢查回應:你可以檢查回應的狀態碼以確保請求成功。通常,200表示成功,而其他狀態碼表示不同的錯誤。你可以使用 response.status_code 獲取狀態碼。

    if response.status_code == 200:
        print('請求成功!')
    
  5. 獲取內容:你可以使用 response.text 屬性來獲取回應內容,通常是網頁的HTML代碼或其他文本內容。

    content = response.text
    
  6. 發送POST請求:如果你需要向伺服器提交數據,可以使用 requests.post() 方法。你可以在 post() 方法中傳遞數據作為字典或JSON格式。

    data = {'key1': 'value1', 'key2': 'value2'}
    response = requests.post('https://example.com/api', data=data)
    
  7. 處理回應:你可以進一步處理伺服器的回應,例如解析JSON數據、處理cookie等。

    json_data = response.json()  # 解析JSON回應
    cookies = response.cookies  # 獲取cookie