Python爬虫自学系列(一)
文章目錄
- @[toc]
- 前言
- 爬蟲自學路徑
- 網絡爬蟲簡介
- 什么時候用爬蟲
- 網絡爬蟲是否合法
- 封裝屬于你的第一個爬蟲模塊
- 封裝請求頭
- 情況一:
- 情況二:
- 情況三:
- 隨機請求頭
- 獲取網頁數據
- ID遍歷爬蟲(順帶下載限速)
- 網站地圖
- 本篇小結
- @[toc]
- 前言
- 爬蟲自學路徑
- 網絡爬蟲簡介
- 什么時候用爬蟲
- 網絡爬蟲是否合法
- 封裝屬于你的第一個爬蟲模塊
- 封裝請求頭
- 情況一:
- 情況二:
- 情況三:
- 隨機請求頭
- 獲取網頁數據
- ID遍歷爬蟲(順帶下載限速)
- 網站地圖
- 本篇小結
前言
還是想先嗶嗶幾句,雖然大家可能已經迫不及待了。目錄在上邊,可以直接點擊跳轉哦。
之前一直是零零散散的更新爬蟲相關的,畢竟在學校嘛,很多時間不能自主的。要上課,要考試什么什么的。
現在好了,寒假了,系統的整理一份爬蟲系列文。
哎,背后隱藏的,是一個過氣博主想要死灰復燃的心吶。
大家多多支持,贊評收藏都可以,多多益善??
昨天呢,做了一份系列目錄,本來是要用來帶一位朋友的,結果發現我倆技術差不多,但是我覺得這個路徑還是很不錯的
就拿來當做我們這個系列的指導吧!!!
爬蟲自學路徑
初步判定是這樣的啦
1、認識網絡爬蟲與網頁分析,順便聊聊天 2、Xpath 3、爬蟲緩存 4、動態網頁抓取(json) 5、表單交互 6、正則表達式 7、selenium 8、并發下載 9、圖片、音頻、視頻下載 10、驗證碼處理 11、Scrapy 12、來一個實戰 13、再來一個實戰 14、單飛去吧如果有要增加的,會在這里再說。
網絡爬蟲簡介
至于什么是網絡爬蟲,那我就不用多解釋了吧。
什么時候用爬蟲
用于收集不太容易手動收集的數據時。
其實這句話挺內涵的,一千個讀者有一千個哈姆雷特。
在我的認知里,這句話的意思就是收集某些數據的精力耗費要比使用爬蟲大,這時候就可以不要考慮直接使用爬蟲了。
我這樣說沒問題吧。
至于使用爬蟲耗費的精力,需要長時間的經驗積累,建立在對自己的足夠認知上。
精力耗費,從開始考慮使用爬蟲開始,到拿出爬蟲程序,再到它獲取了正確的數據,最后清洗呈現出來為止。
這里面最耗費時間精力的就是編寫代碼和測試了吧。
這時候就需要有現成的框架了,后面我們會講到scrapy框架,是一個很不錯且成熟的爬蟲框架。
其實我是想說,在我們學習的過程中,要有目的的吧我們寫過的爬蟲程序抽象出不變的部分,封裝成我們自己的包。
C++學久了就這個 “臭毛病” ,就喜歡自己封裝 “動態鏈接庫” 。
網絡爬蟲是否合法
這個部分在之前的“偷偷學Python”系列里面有提過,那我就再稍微的講一講吧。
在深入討論爬取一個網站之前,我們首先需要對目標站點的規模和結構進行一定程度的了解。網站自身的 robots.txt 和 Sitemap 文件都可以為我們提供一定的幫助(我就問一聲兒真的會有人去看嗎?反正我是沒看過,給爬的默認能爬了,不給爬的就默認是不給爬了。。。)
封裝屬于你的第一個爬蟲模塊
要想抓取網頁,我們首先需要將其下載下來。
至于解析,清洗,存儲什么的,今天咱先不談。
咱先確定這個網頁能夠下載下來是吧。
就不彎彎繞了,我直接呈現最終步驟。我把這個過程模擬為兩個人建交、授受的一個過程吧。
封裝請求頭
什么是封裝請求頭呢?今天我過來和你交朋友了,
情況一:
我說:“嘿,兄弟,交個朋友?”
你說:“你是誰呢?”
我說:“你猜呀?”
這時候,你什么反應?
之后,我跟你說:“嘿,大兄弟,咱倆既然是朋友了,你可以幫我個小忙嗎?五分鐘,我要你的全部信息。”
但凡你戒備心有的話,就不會給我了。
這是比較好的啦。
情況二:
經過幾句話的寒暄,你發現我是個推銷的,拿著你的信息準備給你推銷點你根本用不上的東西,比方說給頭發本就濃密的你推銷快速生發劑,這不是開玩笑嘛!!!
你會理我嗎?都這么赤裸裸的推銷了。
那應該怎么辦才能把這個生發劑塞到你手里呢?
情況三:
我路過在大廳里等面試通知的你,走過去,調個頭看你一眼,再看你一眼,遞給你一張名片:“小伙子,我是隔壁項目組的組長,你是來面試的?”
你說是啊
我說:“哦,他們這個組工作壓力都挺大的,看你這一頭濃密的頭發,怕是還沒經歷過洗禮。可惜了。”
接著,我又說:“這樣吧,你要是面試過了,到時候扛不住壓力可以來找我,這是我的名片”
唰
然后再把那啥給你。你愉快的收了。
那什么是請求頭呢?就是那張名片了。
一張告訴即將被爬的網站:“我是普通瀏覽器”的名片。
隨機請求頭
咱也不用自己去準備啥請求頭了,大量請求的時候一直用同一個頭也不好,到時候給你封了。
# 導入UserAgent類 from fake_useragent import UserAgentua = UserAgent() #第一次使用UserAgent時,會從互聯網上下載瀏覽器標志數據庫 #如果網速較慢的話,會出現報錯,多試幾次就好了。#print(ua.ie) # 獲取IE瀏覽器標志 print(ua.random) # 獲取一個隨機的瀏覽器標志# 如果要寫在一行:UserAgent().random獲取網頁數據
目前 Python 編寫的主流爬蟲一般都會使用 requests 庫來管理復雜的 HTTP 請求。
import requests from fake_useragent import UserAgentdef get_html(url,times):'''這是一個用戶獲取網頁源數據的函數:param url: 目標網址:param times: 遞歸執行次數:return: 如果有,就返回網頁數據,如果沒有,返回None'''try:res = requests.get(url = url,headers = {"User-Agent":UserAgent().random) #帶上請求頭,獲取數據if res.status>=200 and res.status<=300: #兩百打頭的標識符標識網頁可以被獲取return res else: return Noneexcept Exception as e:print(e) # 顯示報錯原因(可以考慮這里寫入日志)if times>0:get_html(url,times-1) # 遞歸執行ID遍歷爬蟲部分我就不說了,簡單的數學邏輯罷了啊。
ID遍歷爬蟲(順帶下載限速)
如果我們爬取網站的速度過快,就會面臨被封禁或是造成服務器過載的風險。為了降低這些風險,我們可以在兩次下載之間添加一組延時,從而對爬蟲限速。
算了,ID遍歷爬蟲我還是得寫。
import timedef get_ID_html(url_pool,res_pool):'''這是一個用ID循環去下載網頁的函數:param url_pool: url池:param res_pool:返回值池:return: 無'''while url_pool:for url in url_pool:try:res = requests.get(url=url, headers = {"User-Agent":UserAgent().random) # 帶上請求頭,獲取數據url_pool.remove(url)res_pool.append(res)except:passfinally:time.sleep(2)網站地圖
說到這個網站地圖啊,還是先看看是什么吧。
站點地圖是一個網站所有鏈接的容器。很多網站的連接層次比較深,爬蟲很難抓取到,站點地圖可以方便爬蟲抓取網站頁面,通過抓取網站頁面,清晰了解網站的架構,網站地圖一般存放在根目錄下并命名sitemap,為爬蟲指路,增加網站重要內容頁面的收錄。站點地圖就是根據網站的結構、框架、內容,生成的導航網頁文件。站點地圖對于提高用戶體驗有好處,它們為網站訪問者指明方向,并幫助迷失的訪問者找到他們想看的頁面。
怎么看網站地圖呢?
在網站的根目錄下,打開那個robots.txt文件,就能找到網站地圖的網址了。
看一下CSDN的爬蟲協議啊:https://www.csdn.net/robots.txt
最下面有這么一行:Sitemap: http://www.csdn.net/article/sitemap.txt
自己進去看哈。
之后要怎么爬呢,如果你全都要的話。參考上面那塊兒。
如果要對所有的網址做一個篩選嘛,不會真有人要全爬吧?
那建議使用正則表達式。
本篇小結
第一篇,講太多了一不好,就先到這里吧。
本篇介紹了網絡爬蟲,然后給出了一個能夠在后續章節中復用的成熟爬蟲。
此外,我們還介紹了一些外部工具和模塊的使用方法,用于了解網站、用戶代理、網站地圖、爬取延時以及各種高級爬取技術。
下一章中,我們將討論如何從已爬取到的網頁中獲取數據。
贊評收藏一鍵三連啊老鐵們!!!
總結
以上是生活随笔為你收集整理的Python爬虫自学系列(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AndroidStudio 弹出的Saf
- 下一篇: c语言标准库 SOCKET,[转载] 基