Python爬蟲知識1.1 requests庫的安裝與使用

編程語言 網絡爬蟲 Python JSON 走在求知的路上 2017-05-10
先來說說爬蟲的原理:爬蟲本質上是模擬人瀏覽信息的過程,只不過他通過計算機來達到快速抓取篩選信息的目的。所以我們想要寫一個爬蟲,最基本的就是要將我們需要抓取信息的網頁原原本本的抓取下來。這個時候就要用到requests庫了。
  • requests庫的安裝

requests庫本質上就是模擬了我們用瀏覽器打開一個網頁,發起請求是的動作。它能夠迅速的把請求的html源文件保存到本地

他安裝的方式非常簡單:我們用pip工具在命令行裡進行安裝

$ pip install requests`

接著我們看一下是否成功安裝了bs4庫

$ pip list

看一下安裝結果

Python爬蟲知識1.1 requests庫的安裝與使用

  • requests庫的基本使用:

#首先我們先導入requests這個包import requests#我們來吧百度的index頁面的html源碼抓取到本地,並用r變量保存#注意這裡,網頁前面的 http://一定要寫出來,它並不能像真正的瀏覽器一樣幫我們補全http協議r = requests.get("http://www.baidu.com")#將下載到的內容打印一下:print(r.text)

可以看到,百度的首頁源碼文件我們已經把他抓取到本地了。

Python爬蟲知識1.1 requests庫的安裝與使用

上面的抓取過程中,我們用到了requests庫的get方法,

這個方法是requests庫中最常用的方法之一。

他接受一個參數(url)並返回一個HTTP response對象。

與get方法相同的,requests庫還有許多其他常用方法:

Python爬蟲知識1.1 requests庫的安裝與使用

  • 下面我們來詳細瞭解一下 requests.get 這個方法:

#這個方法可以接收三個參數,其中第二個默認為None 第三個可選def get(url, params=None, **kwargs)#作用是模擬發起GET請求Sends a GET request.#模擬獲取頁面的url鏈接:param url: URL for the new :class:Request object. #額外參數 字典或字節流格式,可選:param params: (optional) Dictionary or bytes to be sent in the query string for the :class:Request. # 十二個控制訪問參數,比如可以自定義header:param **kwargs: Optional arguments that request takes. # 返回一個Response對象:return: :class:Response <Response> object :type: requests.Response
  • 我們來著重講一下 **kwargs 這個參數

kwargs: 控制訪問的參數,均為可選項

params : 字典或字節序列,作為參數增加到url中

data : 字典、字節序列或文件對象,作為Request的內容 json : JSON格式的數據,作為Request的內容

headers : 字典,HTTP定製頭

cookies : 字典或CookieJar,Request中的cookie

auth : 元組,支持HTTP認證功能

files : 字典類型,傳輸文件

timeout : 設定超時時間,秒為單位

proxies : 字典類型,設定訪問代理服務器,可以增加登錄認證

allow_redirects : True/False,默認為True,重定向開關

stream : True/False,默認為True,獲取內容立即下載開關

verify : True/False,默認為True,認證SSL證書開關

cert : 本地SSL證書路徑

url: 擬更新頁面的url鏈接

data: 字典、字節序列或文件,Request的內容

json: JSON格式的數據,Request的內容

常用的兩個控制訪問參數:

1. 假設我們需要在GET請求裡自定義一個header頭文件:

import requestshd = {'User-agent':'123'}r = requests.get('http://www.baidu.com', headers=hd)print(r.request.headers)'''OUT:{'User-agent': '123', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}'''

2. 假設我們要自定義一個代理池

pxs = { 'http': 'http://user:[email protected]:1234', 'https': 'https://10.10.10.1:4321' }r = requests.get('http://www.baidu.com', proxies=pxs)
  • 詳細瞭解Response對象

import requestsr = requests.get("http://www.baidu.com")'''Response(self)The :class:Response <Response> object, which contains a server's response to an HTTP request.'''#HTTP請求的返回狀態,比如,200表示成功,404表示失敗print (r.status_code)#HTTP請求中的headersprint (r.headers)#從header中猜測的響應的內容編碼方式 print (r.encoding)#從內容中分析的編碼方式(慢)print (r.apparent_encoding)#響應內容的二進制形式print (r.content)'''status_code:200 headers:{'Server': 'bfe/1.0.8.18', 'Date': 'Tue, 02 May 2017 12:01:47 GMT', 'Content-Type': 'text/html', 'Last-Modified': 'Mon, 23 Jan 2017 13:28:27 GMT', 'Transfer-Encoding': 'chunked', 'Connection': 'Keep-Alive', 'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Pragma': 'no-cache', 'Set-Cookie': 'BDORZ=27315; max-age=86400; domain=.baidu.com; path=/', 'Content-Encoding':'gzip'}encoding: ISO-8859-1apparent_encoding:utf-8'''
  • requests抓取網頁的通用框架

import requestsdef getHtmlText(url): try: r = requests.get(url, timeout=30) # 如果狀態碼不是200 則應發HTTOError異常 r.raise_for_status() # 設置正確的編碼方式 r.encoding = r.apparent_encoding() return r.text except: return "Something Wrong!"

好了關於requests庫我們今天就寫到這,這是一個非常強大的庫,

相關推薦

推薦中...