request庫

1 安裝

pip install requests

2 主要的方法

requests.request()  支撐全部的基礎方法
requests.get()      
requests.head()
requests.post()
requests.put()
requests.patch()
requests.delete()

3 get方法

r = requests.get( url )

 

    r是一個Response對象, 包含爬蟲返回的內容html

    url的Requestnode

  requests.get(url, params=None, **kwargs)python

  基本操做方法json

import requests
r = requests.get("http://www.baidu.com")
print(r.status_code)

4 Response對象屬性

  status_code小程序

    HTTP請求的返回狀態, 200表示成功瀏覽器

  text服務器

    頁面內容網絡

  encodingapp

    根據header猜想的內容編碼方式框架

  apparent_encoding

    從內容中分析出來的編碼方式

  content

    HTTP相應的二進制形式

5 Requests庫的異常

  ConnectionError

    網絡連接錯誤, 例如DNS查詢失敗, 拒絕連接等

  HTTPError

    HTTP錯誤

  URLRequires

    衝過最大重定向次數

  ConnectTimeout

    連接超時異常, 僅僅是連接的時候的時間超出

  Timeout

    url請求超時, 是這個過程的時間超出

6 通用代碼框架  

  通用代碼框架以下

  注意: 該文件不能命名爲requests.py

import requests


def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "產生異常"


if __name__ == "__main__":
    url = "http://www.python.org"
    print(getHTMLText(url))

7 HTTP協議

  HTTP超文本傳輸協議

  URL格式:

    http://host[:port][path]

    host是合法的主機域名或者IP地址

    port是端口, 默認是80

    path是資源路徑

  對資源的操做

    GET 獲取資源

    HEAD 得到資源的相應消息報告, 也就是資源的頭部

    POST 請求資源後附加的新數據

    PUT 存儲一個資源, 覆蓋原資源(所有更新)

    PATCH 局部更新

    DELETE 刪除資源

  

  requests庫的方法對應的就是HTTP的操做

8 requests庫方法詳解

  requests庫的核心方法是 requests.request()方法

  

  其中method就是對應的 GET; HEAD; POST; PUT; PATCH; DELETE; OPTIONS

    其中的OPTIONS是用於與服務器交互得到配置的方法

  關於kwargs

    params = 字典, 字節序列

      該params會拆解成鍵值對放到url以後當作提交的參數

    data = 字典, 字節序列, 文件對象

      做爲requests的內容

    json = json格式數據

      做爲requests的內容

    headers = 字典

      HTTP定製頭部, 諸如修改user-agent來假裝成某個瀏覽器

    auth = 元組

      支持HTTP的認證功能

    files = 字典

      傳輸文件

    timeout = 數字

      超時時間, 秒爲單位

    proxies = 字典類型

      設定訪問的代理服務器, 增長登陸認證

    allow_redirects = True/False

      重定向開關, 默認True

    stream = True/False

       內容當即下載開關, 默認True

    verify = True/False

      認證ssl證書開關, 默認True

    cert 本地ssl證書路徑

  其他的方法只是將經常使用的參數設爲默認參數了, 基本使用功能不變

    get(url, params=None, **kwargs):

    head(url, **kwargs):

    post(url, data=None, json=None, **kwargs):

    put(url, data=None, **kwargs):

    patch(url, data=None, **kwargs):

    delete(url, **kwargs):

    options(url, **kwargs):

9 利用requests庫的小程序

  最基本的獲取京東某MAC的頁面

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'weihuchao'

import requests
url = "https://item.jd.com/2060618.html"
try:
    r = requests.get(url)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text[:1000])
except:
    print("爬取失敗")

  設置User-Agent來突破網站的限制

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'weihuchao'

import requests

url = "https://www.amazon.cn/Kindle%E7%94%B5%E5%AD%90%E4%B9%A6/b/ref=sv_kinc_3?ie=UTF8&node=116169071"

try:
    kv = {'user-agent':'Mozilla/5.0'}
    r = requests.get(url, headers=kv)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text[1000:2000])
except:
    print("爬取失敗")

  經過分析網站的連接形式, 獲得網站的 網站+參數 的格式

  利用get()方法中的params來設置傳入的參數

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'weihuchao'

import requests

keyword = "Python"
url = "http://www.baidu.com/s"

try:
    kv = {'wd': keyword}
    r = requests.get(url, params=kv)
    r.raise_for_status()
    print(len(r.text))
except:
    print("爬取失敗")

  利用requests庫來下載圖片

  要點是找到網絡圖片的地址

  得到的requests對象的content值就是文件的內容

  經過rb的讀寫模式能夠實現文件的存儲

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'weihuchao'

import requests
import os

url = "http://edu-image.nosdn.127.net/3321D6673EB82C94D08E1B80E8344166.jpg"
root = "F://"
path = root + url.split('/')[-1]

try:
    if not os.path.exists(root):
        os.mkdir(root)
    if not os.path.exists(path):
        r = requests.get(url)
        with open(path, 'wb') as f:
            f.write(r.content)
            f.close()
            print("保存文件成功")
    else:
        print("文件已存在")
except:
    print("爬取失敗")
相關文章
相關標籤/搜索