Python 網絡爬蟲(一、requests 庫)

一、requests 庫實現自動網絡請求,自動爬取 HTML 頁面。

簡單例子:(注:所有例子均在python 3.6 運行 )

import requests                         # 導入 requests 庫
url = "http://www.baidu.com"
r = requests.get(url)                   # 獲取頁面內容
r.encoding = r.apparent_encoding        # 編碼方式轉換
print (r.text)                          # url 對應的頁面內容,爲字符串形式

這裏實現了對百度首頁的信息爬取,核心爲 request 庫的 get() 方法。

二、Requests 庫的7個主要方法:

requests.request(method,url,**kwargs)                # 構造一個請求,爲以下個方法的基礎
requests.get(url,params=None,**kwargs) (常用)       # 獲取 HTML網頁的主要方法
requests.head(url,**kwargs)                          # 獲取 HTML 網頁頭信息的方法
requests.post(url, data=None,json = None, **kwargs)  # 向HTML網頁提交POST 請求的方法
requests.put(url, data=None, **kwargs)               # 向 HTML 提交PUT請求的方法
requests.patch(url, data=None, **kwargs)             # 向 HTML 提交局部修改請求
requests.delete(url, **kwargs)                       # 向 HTML 頁面提交刪除請求

各個參數的意義:
1、method : 請求方式,對應 get/put/post 等 7 種方法;
2、url : 擬獲取頁面的 url 鏈接;
3、params : 字典或者字節序列,作爲參數增加到 url 中
4、data : 字典、字節序列或者文件對象,作爲Request 的內容
5、**kwargs:控制訪問的參數,均爲可選項,具體包括:

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證書路徑

其中,只有requests.get(url,params=None,**kwargs)比較常用。

三、r = requests.get(rul)獲取的對象屬性

Response 對象的屬性由以下例子給出:

#-*- coding:utf-8 -*-
# 爬去京東商品信息
import requests
def GetHTMLText(url):
    try:
        r = requests.get(url,timeout=30)    # 獲取網頁內容,並設置超時時間
        print r.status_code                # HTTP 請求的放回狀態,200 表示鏈接成功,404 表示失敗
        r.raise_for_status()                # 判斷r.raise_code 是否等於200。如果不是200,可以直接產生異常requests.HTTPError
        print r.encoding                   # 從 HTTP  header 中猜測的相應內容編碼方式
        print r.apparent_encoding          # 從內容中分析出的響應內容編碼方式(可看作是r.encoding 的備選編碼方式)
        #print r.content                    # HTTP 相應內容的二進制形式
        print r.text                       # HTTP 響應內容的字符串形式,即 url 對應的網頁內容
    except:
        print"there are something wrong"
if __name__ == '__main__':
    url = "https://item.jd.com/6946605.html"
    GetHTMLText(url)

四、使用requests 庫爬取網頁的通用代碼框架及案例

4.1、通用代碼框架:

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

4.2、 學會改變 user-agent 信息,即改變 headers

通過 headers 字段,模擬瀏覽器向亞馬遜網站發出HTTP請求

#-*- coding:utf-8 -*-
import requests
# 爬去亞馬遜商品信息:
def GetHTMLText(url):
    try:
        #kv = {'user-agent':'Mozilla/5.0'}
        #r = requests.get(url,headers=kv)
        r = requests.get(url)
        print r.request.headers
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        print r.headers
        #print r.text
    except:
        print"there are something wrong"

if __name__ == '__main__':
    url = "https://www.amazon.cn/gp/product/B01M8L5Z3Y"
    GetHTMLText(url)

4.3、網絡圖片爬取與存儲

網絡圖片的鏈接格式應爲:http://www.example.com/picture.jpg
例如:來自國家地理的圖片:http://www.nationalgeographic.com.cn/

#-*- coding:utf-8 -*-
import requests
import os

def GetPicture(url):
    root = "F://picture//"
    path = root + "abc.jpg"                   # 對爬取得圖片命名
    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)              # r.content 返回內容的二進制形式
                f.close()
                print("文件保存成功")
        else:
            print("文件已經存在")
    except:
        print("爬取失敗")

if __name__ == '__main__':
    url = "http://image.ngchina.com.cn/2018/0424/20180424121849734.jpg"
    GetPicture(url)

獲取網頁的內容只是爬蟲的第一步,如何提取有用信息,是網頁爬蟲的重要內容。

——摘自:中國大學MOOC 《Python網絡爬蟲與信息提取》 嵩天老師課件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章