當前位置:
首頁 >
【Python】爬虫学习
發(fā)布時間:2025/4/5
28
豆豆
生活随笔
收集整理的這篇文章主要介紹了
【Python】爬虫学习
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
"""
# urllib:urllib庫,它是Python內置的HTTP請求庫,也就是說不需要額外安裝即可使用。它包含如下4個模塊。
# request:它是最基本的HTTP請求模塊,可以用來模擬發(fā)送請求。就像在瀏覽器里輸入網(wǎng)址然后回車一樣,只需要給庫方法傳入URL以及額外的參數(shù),就可以模擬實現(xiàn)這個過程了。
# error:異常處理模塊,如果出現(xiàn)請求錯誤,我們可以捕獲這些異常,然后進行重試或其他操作以保證程序不會意外終止。
# parse:一個工具模塊,提供了許多URL處理方法,比如拆分、解析、合并等。
# robotparser:主要是用來識別網(wǎng)站的robots.txt文件,然后判斷哪些網(wǎng)站可以爬,哪些網(wǎng)站不可以爬,它其實用得比較少。
"""
import urllib.request
import urllib.parse
import socket
import urllib.error"""
# 語法:urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
# 功能:獲取網(wǎng)站的信息
# url:網(wǎng)站的URL地址
# data:附加數(shù)據(jù),data參數(shù)是可選的。如果要添加該參數(shù),并且如果它是字節(jié)流編碼格式的內容,即bytes類型,則需要通過bytes()方法轉化。另外,如果傳遞了這個參數(shù),則它的請求方式就不再是GET方式,而是POST方式。
# timeout:超時時間
"""
response = urllib.request.urlopen("https://www.python.org")# 輸出返回的網(wǎng)頁內容
print(response.read().decode('utf-8'))
# 輸出響應的類型:<class 'http.client.HTTPResponse'>
print(type(response))
# 輸出響應的狀態(tài)碼,如200代表請求成功,404代表網(wǎng)頁未找到等。
print(response.status)
# 輸出響應的頭信息
print(response.getheaders())
# 輸出通過調用getheader()方法并傳遞一個參數(shù)Server獲取了響應頭中的Server值,結果是nginx,意思是服務器是用Nginx搭建的。
print(response.getheader("Server"))# 這里我們傳遞了一個參數(shù)word,值是hello。它需要被轉碼成bytes(字節(jié)流)類型。其中轉字節(jié)流采用了bytes()方法,該方法的第一個參數(shù)需要是str(字符串)類型,需要用urllib.parse模塊里的urlencode()方法來將參數(shù)字典轉化為字符串;第二個參數(shù)指定編碼格式,這里指定為utf8。
data = bytes(urllib.parse.urlencode({"word": "hello"}), encoding = "utf-8")
response_data = urllib.request.urlopen("https://httpbin.org/get", timeout=1)print(response.read())try:response_timeout = urllib.request.urlopen("https://httpbin.org/get", timeout = 0.1)
except urllib.error.URLError as e:if isinstance(e.reason, socket.timeout):print("Time Out")request = urllib.request.Request("https://python.org")
response_request = urllib.request.urlopen(request)
print(response_request.read().decode("utf-8"))'''
# 利用urlopen()可以實現(xiàn)最基本請求的發(fā)起,但這幾個簡單的參數(shù)不足以構建一個完整的請求。
# 如果請求中加入Headers等信息,就可以利用更加強大的Request類來構建
# class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
# url:用于請求URL,這是必傳參數(shù),其他都是可選參數(shù)
# data:如果data要傳,必須傳bytes(字節(jié)流)類型的。如果它是字典,可以先用urllib.parse模塊里的urlencode()編碼
# headers:是一個字典,它是請求頭,我們可以在構造請求時通過headers參數(shù)直接構造,也可通過調用請求實例的add_header()方法添加
# 添加請求頭最常用的方法就是通過修改User-Agent來偽裝瀏覽器,默認的User-Agent時Python-urllib,我們可以通過修改它來偽裝瀏覽器
# 比如偽裝火狐瀏覽器,可把它設置為:Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11
# origin_req_host:指的是請求方的host名稱或者IP地址
# unverifiable:表示這個請求是否是無法驗證的,默認False,意思就是說用戶沒有足夠權限來選擇接收這個請求的結果
# method:是一個字符串,用來指示請求使用的方法,比如GET、POST、和PUT等
'''
url = 'http://httpbin.org/post'
headers = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)','Host': 'httpbin.org'
}
dict = {'name': 'Germey'
}
data = bytes(parse.urlencode(dict), encoding='utf8')
req = request.Request(url=url, data=data, headers=headers, method='POST')
response = request.urlopen(req)
print(response.read().decode('utf-8'))
《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的【Python】爬虫学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Arduino】利用FDC2214加L
- 下一篇: 【Python】调用百度云API图像搜索