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