日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

爬虫 404 try_Python爬虫MOOC笔记

發(fā)布時間:2024/7/23 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬虫 404 try_Python爬虫MOOC笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
寫在前面的小于碎碎念

最近在學(xué)習(xí)Python爬蟲內(nèi)容,其實(shí)很多知識在網(wǎng)上搜索一下都能查到,但是作為自己的一種學(xué)習(xí)記錄,也是回顧與復(fù)習(xí)呀。

這種東西真的變化超級快,以前可以直接爬取的內(nèi)容,現(xiàn)在很多網(wǎng)站都增加了反爬機(jī)制,報(bào)錯家常便飯TAT,常常覺得自己是bug生產(chǎn)機(jī),不過畢竟前人栽樹后人乘涼,大多數(shù)問題都可以通過檢索得到解決,能成功解決問題也是成就感的來源之一呢~

總結(jié)來說爬蟲是從網(wǎng)絡(luò)獲取信息、解析信息并最終輸出為需要格式的過程。

說起來也挺有意思的,用公眾號順帶掌握了一波公共號排版和插入代碼的小技巧哈哈。好啦,那我們一起開始叭!

以下內(nèi)容主要來源于中國大學(xué)MOOC--Python網(wǎng)絡(luò)爬蟲與信息提取--北京理工大學(xué)。僅供個人學(xué)習(xí)使用。(代碼部分可右滑閱讀全部內(nèi)容)

需要有Python基礎(chǔ)知識才能看懂哦~不然就跟第一次接觸的我一樣,全程聽天書QAQ

思維導(dǎo)圖

第一周 網(wǎng)絡(luò)爬蟲規(guī)則

1.1Request庫入門

Request庫的安裝

需要安裝request庫,判斷安裝情況:code返回200說明成功

?import?requests
r?=?requests.get("https://www.baidu.com")
print(r.status_code)
r.encoding?=?'utf-8'
print(r.text)
request庫7個主要方法
方法說明
requests.request()構(gòu)造一個請求,支撐以下個方法的基礎(chǔ)方法
requests.get()獲取HTML網(wǎng)頁的主要方法,對應(yīng)于HTTP的GET
requests.head()獲取HTML網(wǎng)頁頭信息的方法,對應(yīng)于HTTP的HEAD
requests.post()向HTML網(wǎng)頁提交POST請求的方法,對應(yīng)于HTTP的POST
requests.put()向HTML網(wǎng)頁提交PUT請求的方法,對應(yīng)于HTTP的PUT
requests.patch()向HTML網(wǎng)頁提交局部修改請求,對應(yīng)于HTTP的PATCH
requests.delete()向HTML網(wǎng)頁提交局部刪除請求,對應(yīng)于HTTP的PDELETE

Request庫的get()方法

r = request.get(url) 通過get(url)構(gòu)造一個向服務(wù)器請求資源的Request對象?request.get是返回一個包含服務(wù)器資源的Response對象

完整形式

?r = request.get(url,params=None,**kwargs)?

url:擬獲取頁面的url鏈接?

(個人理解url是網(wǎng)頁訪問地址https://developer.mozilla.org/zh-CN/docs/Learn/Common_questions/What_is_a_URL)

params:url中的額外參數(shù),字典或字節(jié)流格式,可選

**kwargs:12個控制訪問的參數(shù)

response對象的屬性
屬性說明
r.status_codeHTTP請求的返回狀態(tài),200表示連接成功,404失敗
r.textHTTP相應(yīng)內(nèi)容的字符串形式,即url對應(yīng)的頁面內(nèi)容
r.encoding從HTTP header中猜測的響應(yīng)內(nèi)容編碼方式
r.apparent_encoding從內(nèi)容中分析的響應(yīng)內(nèi)容編碼方式(備選編碼方式)
r.contentHTTP響應(yīng)內(nèi)容的二進(jìn)制方式

r.status_code(200)→r.encoding/r.apparent_encoding/r.content

r.encoding: 若header中不存在charset,則認(rèn)為編碼為ISO-8859-1

個人理解,encoding是從head中charset部分提取得到的編碼方式,而apparent_encoding是根據(jù)整體內(nèi)容分析得到的編碼方式,因此更為準(zhǔn)確,但同時速度可能慢一些

爬取網(wǎng)頁的通用代碼框架

request庫異常
異常說明
requests.ConnectionError網(wǎng)絡(luò)連接錯誤異常,如DNS查詢失敗、拒絕連接等(僅限連接時的異常)
requests.HTTPErrorHTTP錯誤異常
requests.URLRequiredURL缺失異常
requests.TooManyRedirects超過最大重定向次數(shù),產(chǎn)生重定向異常
requests.ConnectTimeout連接遠(yuǎn)程服務(wù)器超時異常
requests.Timeout請求URL超時,產(chǎn)生超時異常(整個過程)

?r.raise_for_status()?判斷返回的類型是否是200,是的話說明返回內(nèi)容正常,否則產(chǎn)生異常requests.HTTPError

通用代碼框架:

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?"產(chǎn)生異常"
url?=?"https://www.baidu.com"
print(getHTMLTEXT(url))

使得爬取網(wǎng)頁更加穩(wěn)定、有效、可靠

HTTP協(xié)議及Request庫方法

HTTP,Hypertext Transfer Protocol,超文本傳輸協(xié)議。

HTTP是一個基于“請求與響應(yīng)”模式的、無狀態(tài)的應(yīng)用層協(xié)議。用戶發(fā)起請求,服務(wù)器做出響應(yīng)。無狀態(tài)指不同次數(shù)之間的訪問沒有相互關(guān)聯(lián)。HTTP協(xié)議采用URL作為定位網(wǎng)絡(luò)資源的標(biāo)識。

URL格式:http://host[:port][path]

host:合法的Internet主機(jī)域名或IP地址

port:端口號,默認(rèn)端口為80

path:內(nèi)部路徑

url是通過HTTP協(xié)議存取資源的一個路徑(類似電腦中對應(yīng)的文件夾路徑,但此路徑再Internet上),每一個url對應(yīng)一個數(shù)據(jù)資源

(URL定義參考? ? ? ? ? ? ? ? ? ??https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_URL)

方法說明
GET請求獲取URL位置的資源
HEAD請求獲取URL位置資源的頭部信息
POST請求向URL位置的資源后附加新的數(shù)據(jù)
PUT請求向URL位置存儲一個資源,覆蓋原URL位置的資源
PATCH請求局部更新URL位置的資源,即改變該處資源的部分內(nèi)容
DELETE請求刪除URL位置存儲的資源

云端上的所有資源通過URL進(jìn)行標(biāo)識,通過GET\HEAD獲得資源,通過PUT\POST\PATCH\DELETE對云端資源進(jìn)行修改(每一次操作獨(dú)立無狀態(tài)的)

PATCH\PUT區(qū)別:

?用PATCH只需要改變一個地方的內(nèi)容,PUT要將改變的內(nèi)容及其他未改變內(nèi)容一并提交。PATCH優(yōu)點(diǎn)是節(jié)省網(wǎng)絡(luò)帶寬。HTTP協(xié)議與request庫方法是一致的。

POST方法 提交列表,會默認(rèn)進(jìn)入form中;提交字符串,默認(rèn)編碼為data PUT類似

request庫主要方法解析

向URL POST一個字典,自動編碼為表單(form),POST一個字符串,自動編碼為data

requests.request(method,url,**kwargs)

method:請求方式,對應(yīng)get等7種

url:擬獲取頁面的URL鏈接

**kwargs:控制訪問的參數(shù),共13個

可選參數(shù):
  • params:字典或字節(jié)序列,作為參數(shù)增加到url中 相當(dāng)于篩選資源

  • data:字典、字節(jié)序列或文件對象,作為request的內(nèi)容 理解是把內(nèi)容存儲到對應(yīng)的url中

  • json:JSON格式的數(shù)據(jù),作為內(nèi)容部分可以向服務(wù)器提交

  • headers:字典,HTTP定制頭 訪問時的頭字段 可以模擬瀏覽器向服務(wù)器中發(fā)起訪問

  • cookies:字典或CookieJar,request中的cookie

  • auth:元組,支持HTTP認(rèn)證功能

  • files:字典類型,傳輸文件 向鏈接提交文件

  • timeout:設(shè)定超時時間,以秒為單位

  • proxies:字典類型,設(shè)定訪問相關(guān)的代理服務(wù)器,可以增加登錄認(rèn)證 例如訪問百度時可以采用代理服務(wù)器的地址,隱藏源地址(感覺有點(diǎn)像VPN的道理)

  • allow_redirects:True/False,默認(rèn)為T,重定向開關(guān) 是否允許重定向

  • stream:True/False,默認(rèn)為T,獲取內(nèi)容立即下載開關(guān)

  • verify:True/False,默認(rèn)為T,認(rèn)證SSL證書開關(guān)

  • cert:保存本地SSL證書路徑的字段(不詳細(xì)介紹)

小結(jié):對網(wǎng)絡(luò)爬取,主要關(guān)注get和head即可。

課后練習(xí)1:成功爬取網(wǎng)頁100次并測試時間

import?requests?as?rq
import?time
def?gethtml(url):
????try:
????????r?=?rq.get(url)
????????r.raise_for_status()
????????r.encoding?=?r.apparent_encoding
????????return?r
????except:
????????return?'爬取失敗'
if?__name__?==?'__main__':?#?如果模塊是被直接運(yùn)行的,則代碼塊被運(yùn)行,如果模塊是被導(dǎo)入的,則代碼塊不被運(yùn)行。
????start?=?time.perf_counter()
????url?=?'http://baidu.com'
????for?i?in?range(100):
????????gethtml(url)
????????end?=?time.perf_counter()
????print('一百次爬取時間為{:.2f}秒'.format(end-start))?#保留兩位小數(shù)

time.perf_counter() # 調(diào)用一次 perf_counter(),從計(jì)算機(jī)系統(tǒng)里隨機(jī)選一個時間點(diǎn)A,

計(jì)算其距離當(dāng)前時間點(diǎn)B1有多少秒。當(dāng)?shù)诙握{(diào)用該函數(shù)時,默認(rèn)從第一次調(diào)用的時間點(diǎn)A算起,

課后練習(xí)2:獲得GitHub的小圖標(biāo)

import?requests?as?rq
r=?rq.get("https://github.com/favicon.ico")
with?open('favicon.ico','wb')?as?f:?#favicon.ico,文件名稱?wb?讀寫方式
????f.write(r.content)
wb以二進(jìn)制格式打開一個文件只用于寫入。open函數(shù)介紹https://www.runoob.com/python/python-func-open.html

用Session可以模擬同一個對話而維持cookies,常用于模擬登陸成功后的下一步操作。對顯示證書錯誤的頁面,可以通過設(shè)置verify參數(shù)為false,并用disable_warnings等方法屏蔽證書錯誤警告。可用proxies參數(shù)設(shè)置代理。

參考資料

作業(yè)代碼參考https://developer.aliyun.com/article/637534

對time.perf_counter()理解https://www.runoob.com/note/35499

對if __name__ == '__main__'理解https://blog.konghy.cn/2017/04/24/python-entry-program/?spm=a2c6h.12873639.0.0.7928184dD8jlCj

對format函數(shù)的理解https://www.runoob.com/python/att-string-format.html

排版 135編輯器

代碼在線編輯網(wǎng)站:http://md.aclickall.com/

總結(jié)

以上是生活随笔為你收集整理的爬虫 404 try_Python爬虫MOOC笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。