[實戰演練]python3使用requests模組爬取頁面內容

abcjob發表於2021-09-09
本文摘要:
1.安裝pip
2.安裝requests模組
3.安裝beautifulsoup4
4.requests模組淺析
    + 傳送請求 + 傳遞URL引數
    + 響應內容
    + 獲取網頁編碼
    + 獲取響應狀態碼
5.案例演示
後記


1.安裝pip

我的個人桌面系統用的linuxmint,系統預設沒有安裝pip,考慮到後面安裝requests模組使用pip,所以我這裡第一步先安裝pip。

$ sudo apt install python-pip

安裝成功,檢視PIP版本:

$ pip -V


2.安裝requests模組

這裡我是透過pip方式進行安裝:

$ pip install requests

圖片描述

安裝requests

執行import requests,如果沒提示錯誤,那說明已經安裝成功了!

圖片描述

檢驗是否安裝成功


3.安裝beautifulsoup4

Beautiful Soup 是一個可以從HTML或XML檔案中提取資料的Python庫。它能夠透過你喜歡的轉換器實現慣用的文件導航,查詢、修改文件的方式。Beautiful Soup會幫你節省數小時甚至數天的工作時間。

$ sudo apt-get install python3-bs4

注:這裡我使用的是python3的安裝方式,如果你用的是python2,可以使用下面命令安裝。

$ sudo pip install beautifulsoup4


4.requests模組淺析

1)傳送請求

首先當然是要匯入 Requests 模組:

>>> import requests

然後,獲取目標抓取網頁。這裡我以簡書為例:

>>> r = requests.get('')

這裡返回一個名為 r 的響應物件。我們可以從這個物件中獲取所有我們想要的資訊。這裡的get是http的響應方法,所以舉一反三你也可以將其替換為put、delete、post、head。

2)傳遞URL引數

有時我們想為 URL 的查詢字串傳遞某種資料。如果你是手工構建 URL,那麼資料會以鍵/值對的形式置於 URL 中,跟在一個問號的後面。例如, jianshu.com/get?key=val。 Requests 允許你使用 params 關鍵字引數,以一個字串字典來提供這些引數。

舉例來說,當我們google搜尋“python爬蟲”關鍵詞時,newwindow(新視窗開啟)、q及oq(搜尋關鍵詞)等引數可以手工組成URL ,那麼你可以使用如下程式碼:

>>> payload = {'newwindow': '1', 'q': 'python爬蟲', 'oq': 'python爬蟲'}

>>> r = requests.get("", params=payload)

3)響應內容

透過r.text或r.content來獲取頁面響應內容。

>>> import requests

>>> r = requests.get('')

>>> r.text

Requests 會自動解碼來自伺服器的內容。大多數 unicode 字符集都能被無縫地解碼。這裡補充一點r.text和r.content二者的區別,簡單說:

resp.text返回的是Unicode型的資料;

resp.content返回的是bytes型也就是二進位制的資料;

所以如果你想取文字,可以透過r.text,如果想取圖片,檔案,則可以透過r.content。

4)獲取網頁編碼

>>> r = requests.get('')

>>> r.encoding

'utf-8'


5)獲取響應狀態碼

我們可以檢測響應狀態碼:

>>> r = requests.get('')

>>> r.status_code

200


5.案例演示

最近公司剛引入了一款,這裡我以其官方說明文件頁面為例,並且只抓取頁面中文章標題和內容等有用資訊。

演示環境

作業系統:linuxmint

python版本:python 3.5.2

使用模組:requests、beautifulsoup4

程式碼如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
_author_ = 'GavinHsueh'

import requests
import bs4

#要抓取的目標頁碼地址
url = ''

#抓取頁碼內容,返回響應物件
response = requests.get(url)

#檢視響應狀態碼
status_code = response.status_code

#使用BeautifulSoup解析程式碼,並鎖定頁碼指定標籤內容
content = bs4.BeautifulSoup(response.content.decode("utf-8"), "lxml")
element = content.find_all(id='book')

print(status_code)
print(element)


程式執行返回爬去結果:

圖片描述

抓取成功

關於爬去結果亂碼問題

其實起初我是直接用的系統預設自帶的python2操作的,但在抓取返回內容的編碼亂碼問題上折騰了老半天,google了多種解決方案都無效。在被python2“整瘋“之後,只好老老實實用python3了。對於python2的爬取頁面內容亂碼問題,歡迎各位前輩們分享經驗,以幫助我等後生少走彎路。


後記

python的爬蟲相關模組有很多,除了requests模組,再如urllib和pycurl以及tornado等。相比而言,我個人覺得requests模組是相對簡單易上手的了。透過文字,大家可以迅速學會使用python的requests模組爬取頁碼內容。本人能力有限,如果文章有任何錯誤歡迎不吝賜教,其次如果大家有任何關於python爬去頁面內容的疑難雜問,也歡迎和大家一起交流討論。

我們共同學習,共同交流,共同進步!

參考:



作者:GavinHsueh
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4798/viewspace-2802851/,如需轉載,請註明出處,否則將追究法律責任。

相關文章