python爬蟲整個體系闡述,基礎到進階

2020-12-13 數據燈塔

大家經自學python爬蟲的時候總是會很迷茫,有時候看了在多的視頻,只會讓自己更加的蒙圈,所以我建議如果不是為了三分中熱情玩玩的朋友們,還是去找個系統教學。

這裡為大家聊聊python爬蟲的整個體系。或許你會知道該怎麼一點點去學習。

· Python生態極其豐富,諸如Request、Beautiful Soup、Scrapy、PySpider等第三方庫實在強大

· Python語法簡潔易上手,分分鐘就能寫出一個爬蟲(有人吐槽Python慢,但是爬蟲的瓶頸和語言關係不大)

任何一個學習Python的程式設計師,應該都或多或少地見過甚至研究過爬蟲,我當時寫Python的目的就非常純粹——為了寫爬蟲。所以本文的目的很簡單,就是說說我個人對Python爬蟲的理解與實踐,作為一名程式設計師,我覺得了解一下爬蟲的相關知識對你只有好處,所以讀完這篇文章後,如果能對你有幫助,那便再好不過

什麼是爬蟲:

爬蟲是一個程序,這個程序的目的就是為了抓取全球資訊網信息資源,比如你日常使用的谷歌等搜尋引擎,搜索結果就全都依賴爬蟲來定時獲取

看上述搜索結果,除了wiki相關介紹外,爬蟲有關的搜索結果全都帶上了Python,前人說Python爬蟲,現在看來果然誠不欺我~

爬蟲的目標對象也很豐富,不論是文字、圖片、視頻,任何結構化非結構化的數據爬蟲都可以爬取,爬蟲經過發展,也衍生出了各種爬蟲類型:

· 通用網絡爬蟲:爬取對象從一些種子 URL 擴充到整個 Web,搜尋引擎幹的就是這些事

· 垂直網絡爬蟲:針對特定領域主題進行爬取,比如專門爬取小說目錄以及章節的垂直爬蟲

· 增量網絡爬蟲:對已經抓取的網頁進行實時更新

· 深層網絡爬蟲:爬取一些需要用戶提交關鍵詞才能獲得的 Web 頁面

不想說這些大方向的概念,讓我們以一個獲取網頁內容為例,從爬蟲技術本身出發,來說說網頁爬蟲,步驟如下:

· 模擬請求網頁資源

· 從HTML提取目標元素

· 數據持久化

什麼是爬蟲,這就是爬蟲:

"""讓我們根據上面說的步驟來完成一個簡單的爬蟲程序"""

import requests

from bs4 import BeautifulSoup

target_url = '/s?wd=爬蟲'

發起一個GET請求res = requests.get(target_url)

2.提取HTML並解析想獲取的數據 比如獲取 title

soup = BeautifulSoup(res.text, "lxml")

輸出 soup.title.text

title = soup.title.text

3. 持久化 比如保存到本地

with open('title.txt', 'w') as fp:

fp.write(title)

加上注釋不到20行代碼,你就完成了一個爬蟲,簡單吧

怎麼寫一個簡單爬蟲:

網頁世界多姿多彩、億萬網頁資源供你選擇,面對不同的頁面,怎麼使自己編寫的爬蟲程序夠穩健、持久,這是一個值得討論的問題

俗話說,磨刀不誤砍柴工,在開始編寫爬蟲之前,很有必要掌握一些基本知識:

· 網頁的結構是HTML,爬蟲的目標就是解析HTML,獲取目標欄位並保存

· 客戶端展現的網頁由瀏覽器渲染,客戶端和服務端的信息交互依靠HTTP協議

這兩句描述體現了一名爬蟲開發人員需要掌握的基本知識,不過一名基本的後端或者前端工程師都會這些哈哈,這也說明了爬蟲的入門難度極低,從這兩句話,你能思考出哪些爬蟲必備的知識點呢?

· 基本的HTML知識,了解HTML才方便目標信息提取

· 基本的JS知識 ,JS可以異步加載HTML

· 了解CSS Selector、XPath以及正則,目的是為了提取數據

· 了解HTTP協議,為後面的反爬蟲鬥爭打下基礎

· 了解基本的資料庫操作,為了數據持久化

有了這些知識儲備,接下來就可以選擇一門語言,開始編寫自己的爬蟲程序了,還是按照上一節說的三個步驟,然後以Python為例,說一說要在程式語言方面做那些準備:

· 網頁請求:內置有urllib庫,第三方庫的話,同步請求可以使用requests,異步請求使用aiohttp

· 分析HTML結構並提取目標元素:CSS Selector和XPath是目前主流的提取方式,第三方庫可以使用Beautiful Soup或者PyQuery

· 數據持久化:目標數據提取之後,可以將數據保存到資料庫中進行持久化,MySQL、MongoDB等,這些都有對應的庫支持,當然你也可以保存在硬碟,誰硬碟沒點東西對吧(滑稽臉)

掌握了上面這些,你大可放開手腳大幹一場,全球資訊網就是你的名利場,去吧~

我覺得對於一個目標網站的網頁,可以分下面四個類型:

· 單頁面單目標· 單頁面多目標· 多頁面單目標· 多頁面多目標具體是什麼意思呢,可能看起來有點繞,但明白這些,你之後寫爬蟲,只要在腦子裡面過一遍著網頁對應什麼類型,然後套上對應類型的程序(寫多了都應該有一套自己的常用代碼庫),那寫爬蟲的速度,自然不會慢

單頁面單目標

通俗來說,就是在這個網頁裡面,我們的目標就只有一個,假設我們的需求是抓取這部 電影-肖申克的救贖 的名稱,首先打開網頁右鍵審查元素,找到電影名稱對應的元素位置,如下圖所示:

在某個單一頁面內,看目標是不是只有一個,一眼就能看出標題的CSS Selector規則為:#content > h1 > span:nth-child(1),然後用我自己寫的常用庫,我用不到十行代碼就能寫完抓取這個頁面電影名稱的爬蟲:

多頁面多目標就是此情況下多個url的衍生情況

假設現在的需求是抓取 豆瓣電影250 第一頁中的所有電影名稱,你需要提取25個電影名稱,因為這個目標頁的目標數據是多個item的,因此目標需要循環獲取,這就是所謂的單頁面多目標了:

多頁面多目標是上述單頁面多目標情況的衍生,在這個問題上來看,此時就是獲取所有分頁的電影名稱

如果網絡沒問題的話,會得到如下輸出:

注意爬蟲運行時間,1s不到,這就是異步的魅力

用Python寫爬蟲,就是這麼簡單優雅,諸位,看著網頁就思考下:

· 是什麼類型的目標類型· 用什麼庫模擬請求· 怎麼解析目標欄位· 怎麼存儲一個爬蟲程序就成型了,順便一提,爬蟲這東西,可以說是防君子不防小人,robots.txt大部分網站都有(它的目的是告訴爬蟲什麼可以爬取什麼不可以爬取,比如: /robots.txt),各位想怎麼爬取,自己衡量

如何進階

不要以為寫好一個爬蟲程序就可以出師了,此時還有更多的問題在前面等著你,你要含情脈脈地看著你的爬蟲程序,問自己三個問題:

· 爬蟲抓取數據後是正當用途麼?· 爬蟲會把目標網站幹掉麼?· 爬蟲會被反爬蟲幹掉麼?前兩個關於人性的問題在此不做過多敘述,因此跳過,但你們如果作為爬蟲工程師的話,切不可跳過

會被反爬蟲幹掉麼?

最後關於反爬蟲的問題才是你爬蟲程序強壯與否的關鍵因素,什麼是反爬蟲?

當越來越多的爬蟲在網際網路上橫衝直撞後,網頁資源維護者為了防止自身數據被抓取,開始進行一系列的措施來使得自身數據不易被別的程序爬取,這些措施就是反爬蟲

比如檢測IP訪問頻率、資源訪問速度、連結是否帶有關鍵參數、驗證碼檢測機器人、ajax混淆、js加密等等

對於目前市場上的反爬蟲,爬蟲工程師常有的反反爬蟲方案是下面這樣的:

· 不斷試探目標底線,試出單IP下最優的訪問頻率· 構建自己的IP代理池· 維護一份自己常用的UA庫· 針對目標網頁的Cookie池· 需要JS渲染的網頁使用無頭瀏覽器進行代碼渲染再抓取· 一套破解驗證碼程序· 紮實的JS知識來破解混淆函數爬蟲工程師的進階之路其實就是不斷反反爬蟲,可謂艱辛,但換個角度想也是樂趣所在

關於框架

爬蟲有自己的編寫流程和標準,有了標準,自然就有了框架,像Python這種生態強大的語言,框架自然是多不勝數,目前世面上用的比較多的有:

· Scrapy· PySpider· Portia這裡只是一個體系的介紹,學起來肯定沒這麼容易,框架只是工具,是一種提升效率的方式,看你選擇。

相關焦點

  • Python基礎進階之海量表情包多線程爬蟲功能的實現
    這篇文章主要介紹了Python基礎進階之海量表情包多線程爬蟲,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑑價值,需要的朋友可以參考下一、前言在我們日常聊天的過程中會使用大量的表情包
  • Python網絡爬蟲
    (三):python爬蟲的流程獲取網頁——解析網頁(提取數據)——存儲數據1:獲取網頁:給一個網址發送請求,該網址會返回整個網頁的數據。基礎技術:requests模塊、urllib模塊、selenium模塊進階技術:多進程多線程抓取、登錄抓取、突破IP封禁、使用伺服器抓取。2:解析網頁:從整個網頁中提取想要的數據。
  • 重慶科技學院首屆「曙光瑞翼杯」Python爬蟲競賽
    但是在大數據浪潮中,最值錢的就是數據,企業為了獲得數據,處理數據,理解數據花費了巨大代價,網絡爬蟲則是獲取簡單數據的一種最有效的方式。近日,數據中國「百校工程」項目院校重慶科技學院數理與大數據學院MAI協會聯合曙光瑞翼教育舉辦了首屆以「Python爬蟲,數據輕來」為主題的「曙光瑞翼杯」Python爬蟲大賽,全校一共16支隊伍參賽。
  • Python開發簡單爬蟲【學習資料總結】
    一、簡單爬蟲架構 ;另一方面,會將新的URL補充進URL管理器,若有URL管理器中含有新的URL,則重複上述步驟,直到爬取完所有的URL 6、最後,調度器會調動應用的方法,將價值數據輸出到需要的格式。
  • Python爬蟲從入門到精通只需要三個月
    為什麼要學習python爬蟲?隨著了解爬行動物學習的人越來越多,就業需求也越來越需要這一塊的工作人員。在一方面,網際網路可以得到越來越多的數據。在另一方面,就像Python程式語言提供了越來越多的優秀的工具,允許爬蟲簡單,使用方便。我們使用爬蟲可以得到很多數據值。
  • Python新手爬蟲,簡單製作抓取廖雪峰的教程的小爬蟲
    在整個抓取過程中,除了普通的文本以外,還需要處理 3個地方,分別是:代碼、圖片、視頻,因為目前只寫到了文本文件,所以直接抓到圖片或者視頻的地址,標識清楚後寫入到 txt,這裡可以在進一步,寫到 word/pdf 或者其他文件,留待以後改進!
  • Python爬蟲學到什麼程度就可以去找工作了?
    有朋友在群裡和大家討論,問的最多的問題就是,python 爬蟲學到什麼程度可以去找工作了,關於這點,和大家分享下我的理解。去招聘網上看看需求都有哪些,直接做個拉勾網爬蟲(有需要的私信)出結果了:仔細看看,我們可以得出以下幾點:1、 python 不是唯一可以做爬蟲的,很多語言都可以,
  • python爬蟲系列教程,用python爬取全國範圍內的KFC店地址
    每到夜深人靜的時候,小編就開始肚子餓了,這時如果你在不熟悉的城市,想知道附近有沒有KFC店應該怎麼辦呢?下面羽憶教程教你會python爬取全國範圍內的KFC店地址,這是一篇python爬蟲系列的教程,簡單又能讓人填飽肚子。
  • 聊聊學python轉行、具體學習方法、自學python用於辦公、寫爬蟲等...
    但是這些與我們反覆練習好好打基礎並不矛盾。正是對基礎的熟練掌握才能更快更好地把這些銜接起來組合在一起。推薦一本入門書:最後補充一點的就是,學習是沒有止境的,基礎的部分掌握之後千萬不要想著如何「學的更全更好」,要儘快開始寫自己想寫的小項目,然後有針對性的學習,才是進步最快的做法。
  • python 網絡爬蟲有哪些用途
    網絡爬蟲,就是一種自動獲取網頁內容的程序。也就是通過源碼解析來獲得想要的內容。下載的內容包括文字,圖片,多媒體文件等。python有多個庫可實現網絡爬蟲,Urllib是python內置的HTTP請求庫,urllib的功能就是利用程序去執行各種HTTP請求。如果要模擬瀏覽器,需要把請求偽裝成瀏覽器。
  • python爬蟲入門實戰!爬取博客文章標題和連結!
    最近有小夥伴和我留言想學python爬蟲,那麼就搞起來吧。準備階段爬蟲有什麼用呢?舉個最簡單的小例子,你需要《戰狼2》的所有豆瓣影評。最先想的做法可能是打開瀏覽器,進入該網站,找到評論,一個一個複製到文本中,保存,翻頁,接著複製,直到翻到最後一頁。
  • 開課吧Python:Python爬蟲是什麼?爬蟲工程師薪資怎麼樣?
    Python爬蟲是什麼?Python爬蟲是什麼?Python爬蟲是由Python程序開發的網絡爬蟲(webspider,webrobot),是按照一定規則自動抓取全球資訊網信息的程序或腳本。其實一般是通過程序在網頁上獲取你想要的數據,也就是自動抓取數據。為什麼需要用爬蟲?
  • Python爬蟲,抓取淘寶商品評論內容
    今天給大家分享用python做個抓取淘寶商品評論的小爬蟲!思路我們就拿「德州扒雞」做為參考目標吧~!如果想抓其他商品的話,自行更換目標即可!開始寫代碼具體過程就贅述了,新建一個函數,接受店鋪ID(唯一)作為參數,做一個無限循環來翻頁,並以評論時間為判斷是否重複,如果重複則跳出循環(return可以直接跳出循環),整個函數部分代碼如下加入try是因為代碼一直在抽風的跳出index錯誤
  • python爬蟲之selenium抓取淘寶商品信息
    簡介本節採用python爬蟲相關技術獲取淘寶商品信息。採用的技術有selenium、pyquery及urllib.parse等。selenium有優點也有缺點,模擬用戶實際操作,必須等待網頁的必要信息加載完畢,如靜態頁面、css等,所以效率比較低,所以具體看用戶如何取捨,如果注重效率,可以用requests模塊進行分析爬取,後續有空也會採用requests、urllib庫進行爬蟲訓練,使用正則表達式分析爬取到的內容。
  • Python中爬蟲框架或模塊的區別
    Python中爬蟲框架或模塊的區別 (1)爬蟲框架或模塊 Python自帶爬蟲模塊:urllib、urllib2 ; 第三方爬蟲模塊:requests,aiohttp;
  • 雲立方網科普:常用高效的Python爬蟲框架有哪些?
    Python是現在非常流行的程式語言,而爬蟲則是Python語言中最典型的應用,下面是總結的高效Python爬蟲框架,大家看看是否都用過呢。
  • Python 爬蟲面試題 170 道:2019 版
    通過本場 Chat,你將獲得如下知識點掌握 Python 的基礎語法語法常見的 Python 應用場景掌握 Python 閉包的使用以及裝飾器的使用90.寫一段匹配郵箱的正則表達式其他內容91.解釋一下 python 中 pass 語句的作用?
  • 如何開始寫你的第一個python腳本——簡單爬蟲入門!
    好多朋友在入門python的時候都是以爬蟲入手,而網絡爬蟲是近幾年比較流行的概念,特別是在大數據分析熱門起來以後,學習網絡爬蟲的人越來越多,哦對,現在叫數據挖掘了!其實,一般的爬蟲具有2個功能:取數據和存數據!好像說了句廢話。。。
  • python為什麼叫爬蟲?為啥那麼多人通過python兼職都能掙不少錢?
    Python能做什麼之前有很多文章介紹python能做什麼。今天介紹python爬蟲的學習。網絡爬蟲 網絡爬蟲,也叫網絡蜘蛛(Web Spider)。爬蟲是在某個URL頁面入手,抓取到這個頁面的內容,從當前的頁面中找到其他的連結地址,然後從這地址再次爬到下一個網站頁面,這樣一直不停的抓取到有用的信息,所以可以說網絡爬蟲是不停的抓取獲得頁面上想要的信息的程序。還不懂?
  • Python新手都可以做的爬蟲,抓取網上 OJ 題庫信息
    最近有朋友在做 OJ 題庫,順手做個小爬蟲,導出一份題庫列表來看看!目標:浙江大學題庫工具:python3.6,requests 庫、lxml 庫、pycharm思路:先找到網頁中題庫所在的位置然後我們點擊第一頁和後面幾頁,看看 url 的變化發現規律了嗎?