[實戰演練]python3使用requests模組爬取頁面內容
本文摘要: 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python3爬蟲實戰(requests模組)Python爬蟲
- Request模組實戰01 ---簡單爬取頁面
- 透過Requests模組獲取網頁內容並使用BeautifulSoup進行解析網頁
- 【實戰】使用asyncio爬取gitbook內容輸出pdfGit
- [Python3網路爬蟲開發實戰] 7-動態渲染頁面爬取-4-使用Selenium爬取淘寶商品Python爬蟲
- Python 爬蟲進階篇-利用beautifulsoup庫爬取網頁文章內容實戰演示Python爬蟲網頁
- js實現父頁面獲取iframe子頁面內容程式碼JS
- [Python3網路爬蟲開發實戰] 7-動態渲染頁面爬取-1-Selenium的使用Python爬蟲
- Python3爬蟲實戰(urllib模組)Python爬蟲
- 如何使用angularjs實現抓取頁面內容AngularJS
- 使用utl_http獲取某個http頁面內容HTTP
- 爬蟲——Requests模組爬蟲
- 爬蟲-Requests模組爬蟲
- Gin實戰演練
- Python 爬蟲實戰(二):使用 requests-htmlPython爬蟲HTML
- Python 爬蟲實戰(一):使用 requests 和 BeautifulSoupPython爬蟲
- [Python3網路爬蟲開發實戰] 7-動態渲染頁面爬取-3-Splash負載均衡配置Python爬蟲負載
- java 爬取網頁內容。 標題、圖片等Java網頁
- 容災演練,一鍵切換,浙大二院實戰演練圓滿成功!
- python 爬蟲如何爬取動態生成的網頁內容Python爬蟲網頁
- PHP 爬蟲爬取社群文章內容PHP爬蟲
- python爬蟲requests模組Python爬蟲
- mongodb 容災演練操作步步驟【適用於計劃內演練】MongoDB
- 《Python3網路爬蟲開發實戰(第二版)》內容介紹Python爬蟲
- python爬蟲:使用BeautifulSoup修改網頁內容Python爬蟲網頁
- 利用requests+BeautifulSoup爬取網頁關鍵資訊網頁
- 分別用python2和python3偽裝瀏覽器爬取網頁內容Python瀏覽器網頁
- python 爬蟲之requests爬取頁面圖片的url,並將圖片下載到本地Python爬蟲
- requests模組獲取cookieCookie
- 實戰(二)輕鬆使用requests庫和beautifulsoup爬連結
- scrapy定製爬蟲-爬取javascript內容爬蟲JavaScript
- python3網路爬蟲開發實戰_Python3 爬蟲實戰Python爬蟲
- 使用requests+BeautifulSoup的簡單爬蟲練習爬蟲
- iOS 元件化 使用cocoapods整合實戰演練iOS元件化
- 記錄一次使用jsoup爬取頁面JS
- Puppeteer 實戰-爬取動態生成的網頁網頁
- 【Python3網路爬蟲開發實戰】3-基本庫的使用 2-使用requests 1-基本用法Python爬蟲
- UIWebView簡單的獲取HTML內容和修改頁面資訊UIWebViewHTML