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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

爬虫 404 try_Python爬虫MOOC笔记

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

最近在學習Python爬蟲內容,其實很多知識在網上搜索一下都能查到,但是作為自己的一種學習記錄,也是回顧與復習呀。

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

總結來說爬蟲是從網絡獲取信息、解析信息并最終輸出為需要格式的過程。

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

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

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

思維導圖

第一周 網絡爬蟲規則

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()構造一個請求,支撐以下個方法的基礎方法
requests.get()獲取HTML網頁的主要方法,對應于HTTP的GET
requests.head()獲取HTML網頁頭信息的方法,對應于HTTP的HEAD
requests.post()向HTML網頁提交POST請求的方法,對應于HTTP的POST
requests.put()向HTML網頁提交PUT請求的方法,對應于HTTP的PUT
requests.patch()向HTML網頁提交局部修改請求,對應于HTTP的PATCH
requests.delete()向HTML網頁提交局部刪除請求,對應于HTTP的PDELETE

Request庫的get()方法

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

完整形式

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

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

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

params:url中的額外參數,字典或字節流格式,可選

**kwargs:12個控制訪問的參數

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

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

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

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

爬取網頁的通用代碼框架

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

?r.raise_for_status()?判斷返回的類型是否是200,是的話說明返回內容正常,否則產生異常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?"產生異常"
url?=?"https://www.baidu.com"
print(getHTMLTEXT(url))

使得爬取網頁更加穩定、有效、可靠

HTTP協議及Request庫方法

HTTP,Hypertext Transfer Protocol,超文本傳輸協議。

HTTP是一個基于“請求與響應”模式的、無狀態的應用層協議。用戶發起請求,服務器做出響應。無狀態指不同次數之間的訪問沒有相互關聯。HTTP協議采用URL作為定位網絡資源的標識。

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

host:合法的Internet主機域名或IP地址

port:端口號,默認端口為80

path:內部路徑

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

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

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

云端上的所有資源通過URL進行標識,通過GET\HEAD獲得資源,通過PUT\POST\PATCH\DELETE對云端資源進行修改(每一次操作獨立無狀態的)

PATCH\PUT區別:

?用PATCH只需要改變一個地方的內容,PUT要將改變的內容及其他未改變內容一并提交。PATCH優點是節省網絡帶寬。HTTP協議與request庫方法是一致的。

POST方法 提交列表,會默認進入form中;提交字符串,默認編碼為data PUT類似

request庫主要方法解析

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

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

method:請求方式,對應get等7種

url:擬獲取頁面的URL鏈接

**kwargs:控制訪問的參數,共13個

可選參數:
  • params:字典或字節序列,作為參數增加到url中 相當于篩選資源

  • data:字典、字節序列或文件對象,作為request的內容 理解是把內容存儲到對應的url中

  • json:JSON格式的數據,作為內容部分可以向服務器提交

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

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

  • auth:元組,支持HTTP認證功能

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

  • timeout:設定超時時間,以秒為單位

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

  • allow_redirects:True/False,默認為T,重定向開關 是否允許重定向

  • stream:True/False,默認為T,獲取內容立即下載開關

  • verify:True/False,默認為T,認證SSL證書開關

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

小結:對網絡爬取,主要關注get和head即可。

課后練習1:成功爬取網頁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__':?#?如果模塊是被直接運行的,則代碼塊被運行,如果模塊是被導入的,則代碼塊不被運行。
????start?=?time.perf_counter()
????url?=?'http://baidu.com'
????for?i?in?range(100):
????????gethtml(url)
????????end?=?time.perf_counter()
????print('一百次爬取時間為{:.2f}秒'.format(end-start))?#保留兩位小數

time.perf_counter() # 調用一次 perf_counter(),從計算機系統里隨機選一個時間點A,

計算其距離當前時間點B1有多少秒。當第二次調用該函數時,默認從第一次調用的時間點A算起,

課后練習2:獲得GitHub的小圖標

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以二進制格式打開一個文件只用于寫入。open函數介紹https://www.runoob.com/python/python-func-open.html

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

參考資料

作業代碼參考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函數的理解https://www.runoob.com/python/att-string-format.html

排版 135編輯器

代碼在線編輯網站:http://md.aclickall.com/

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。