搜尋
首頁後端開發Python教學Python爬蟲入門心得分享

Python爬蟲入門心得分享

Dec 05, 2017 am 09:53 AM
python分享心得

網路爬蟲是一種自動取得網頁內容的程序,也是搜尋引擎的重要組成部分。網路爬蟲為搜尋引擎從萬維網下載網頁。一般分為傳統爬蟲和聚焦爬蟲。

學爬蟲是循序漸進的過程,作為零基礎小白,大體上可分為三個階段,第一階段是入門,掌握必備的基礎知識,第二階段是模仿,跟著別人的爬蟲代碼學,弄清楚每一行程式碼,第三階段是自己動手,這個階段你開始有自己的解題想法了,可以獨立設計爬蟲系統。

爬蟲涉及的技術包括但不限於熟練一門程式語言(這裡以Python 為例) HTML 知識、HTTP/HTTPS 協定的基本知識、正規表示式、資料庫知識,常用抓包工具的使用、爬蟲框架的使用、涉及大規模爬蟲,還需要了解分散式的概念、訊息佇列、常用的資料結構和演算法、緩存,甚至還包括機器學習的應用,大規模的系統背後都是靠很多技術來支撐的。爬蟲只是為了獲取數據,分析、挖掘這些數據才是價值,因此它還可以延伸到數據分析、數據挖掘等領域,給企業做決策,所以作為一名爬蟲工程師,是大有可為的。

那麼是不是一定要把上面的知識全學完了才可以開始寫爬蟲嗎?當然不是,學習是一輩子的事,只要你會寫 Python 程式碼了,就直接上手爬蟲,好比學車,只要能開動了就上路吧,當然寫程式碼可比開車安全多了。

用 Python 寫爬蟲,首先需要會 Python,把基礎語法搞懂,知道怎麼使用函數、類別和常用的資料結構如 list、dict 中的常用方法就算基本入門。接著你需要了解 HTML,HTML 就是一個文檔樹結構,網路上有個 HTML 30分鐘入門教學 夠用了。然後是關於 HTTP 的知識,爬蟲基本原理就是透過網路請求從遠端伺服器下載資料的過程,而這個網路請求背後的技術就是基於 HTTP 協定。作為入門爬蟲來說,你需要了解 HTTP協定的基本原理,雖然 HTTP 規範用一本書都寫不完,但深入的內容可以放以後慢慢去看,理論與實踐結合。

網路請求框架都是對 HTTP 協定的實現,例如著名的網路請求庫 Requests 就是一個模擬瀏覽器發送 HTTP 請求的網路庫。在了解HTTP 協定之後,你就可以專門有針對性的學習和網路相關的模組了,例如Python 自帶urllib、urllib2(Python3中的urllib),httplib,Cookie等內容,當然你可以直接跳過這些,直接學習Requests 怎麼用,前提是你熟悉了HTTP協定的基本內容。這裡不得不推薦的一本書是《圖解HTTP》。數據爬下來,大部分情況是HTML 文本,也有少數是基於XML 格式或Json 格式的數據,要想正確處理這些數據,你要熟悉每種數據類型的解決方案,例如JSON數據可以直接使用Python自帶的模組json,對於HTML 數據,可以使用BeautifulSoup、lxml 等函式庫去處理,對於xml 數據,除了可以使用untangle、xmltodict等第三方函式庫。

入門爬蟲,學習正規表示式並不是必須的,你可以在你真正需要的時候再去學,例如你把資料爬取回來後,需要對資料進行清洗,當你發現使用常規的字串操作方法根本沒辦法處理時,這時你可以試著了解正規表示式,往往它能起到事半功倍的效果。 Python 的 re 模組可用於處理正規表示式。這裡也推薦幾個教程: 正則表達式30分鐘入門教程Python正則表達式指南正則表達式完全指南

數據清洗完最終要進行持久化存儲,你可以用文件存儲,比如CSV文件,也可以用資料庫存儲,簡單的用sqlite,專業點用MySQL,或是分散式的文檔資料庫MongoDB,這些資料庫對Python都非常友好,有現成的函式庫支援。 Python操作MySQL資料庫透過Python連接資料庫

從資料的抓取到清洗再到儲存的基本流程都走完了,也算是基本入門了,接下來就是考驗內功的時候了,很多網站都設有反爬蟲策略,他們想辦法阻止你用非正常手段獲取數據,比如會有各種奇奇怪怪的驗證碼限制你的請求操作、對請求速度做限制,對IP做限制、甚至對數據進行加密操作,總之,就是為了提高取得數據的成本。這時你需要掌握的知識就要更多了,你需要深入理解 HTTP 協議,你需要理解常見的加解密演算法,你要理解 HTTP 中的 cookie,HTTP 代理,HTTP中的各種HEADER。爬蟲與反爬蟲就是相愛相殺的一對,道高一次魔高一丈。如何應對反爬蟲沒有既定的統一的解決方案,靠的是你的經驗以及你所掌握的知識體系。這不是僅憑21天入門教學就能達到的高度。

資料結構和演算法

進行大規模爬蟲,通常都是從一個URL開始爬,然後把頁面中解析的URL連結加入待爬的URL集合中,我們需要用到佇列或優先隊列來區別對待有些網站優先爬,有些網站後面爬。每爬去一個頁面,是使用深度優先還是廣度優先演算法爬取下一個連結。每次發起網路請求的時候,都會牽涉到一個DNS的解析過程(將網址轉換成IP)為了避免重複地 DNS 解析,我們需要把解析好的 IP 快取下來。 URL那麼多,要如何判斷哪些網址已經爬過,哪些沒有爬過,簡單點就是是使用字典結構來儲存已經爬過的的URL,但是如果碰過海量的URL時,字典佔用的記憶體空間非常大,此時你需要考慮使用Bloom Filter(布隆過濾器),用一個線程逐個地爬取數據,效率低得可憐,如果提高爬蟲效率,是使用多線程,多進程還是協程,還是分散式操作。

關於實踐

網上的爬蟲教程多如牛毛,原理大體相同,只不過是換個不同的網站進行爬取,你可以跟著網上的教程學習模擬登錄一個網站,模擬打卡之類的,爬個豆瓣的電影、書籍之類的。透過不斷練習,從遇到問題到解決問題,這樣的收穫看書沒法比擬的。

爬蟲常用函式庫

  • urllib、urlib2(Python中的urllib)python內建的網路請求函式庫

  • urllib3 :線程安全的HTTP網路請求庫

  • requests:使用最廣泛的網路請求庫,相容於py2和py3

  • grequests:非同步的requests

  • BeautifulSoup:HTML、XML操作解析庫

  • lxml:另一個處理HTML、XML的方式

  • tornado:非同步網路框架

  • ##Gevent:非同步網路框架

  • Scrapy:最受歡迎的爬蟲框架

  • pyspider:爬蟲框架

  • xmltodict:xml轉換成字典

  • pyquery:像jQuery一樣操作HTML

  • Jieba :分詞

  • #SQLAlchemy:ORM框架

  • ##celery :訊息佇列
  • rq:簡單訊息佇列
  • python-goose :從HTML中擷取文字
  • 書籍推薦:

    《圖解HTTP》
  • 《HTTP權威指南》
  • 《電腦網路:自頂向下方法》
  • 《用Python寫網路爬蟲》
  • 《Python網路資料收集》
  • 《精通正規表示式》
  • 《Python入門到實踐》

《自己動手寫網路爬蟲》

《Crypto101》

《圖解密碼技術》

以上內容就是關於Python爬蟲技術入門經驗分享,希望能幫助大家。

###相關推薦:#########Python3 基礎爬蟲簡介############python最簡單的網頁爬蟲教學########## ###python爬蟲的實踐#######

以上是Python爬蟲入門心得分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
您如何切成python陣列?您如何切成python陣列?May 01, 2025 am 12:18 AM

Python列表切片的基本語法是list[start:stop:step]。 1.start是包含的第一個元素索引,2.stop是排除的第一個元素索引,3.step決定元素之間的步長。切片不僅用於提取數據,還可以修改和反轉列表。

在什麼情況下,列表的表現比數組表現更好?在什麼情況下,列表的表現比數組表現更好?May 01, 2025 am 12:06 AM

ListSoutPerformarRaysin:1)DynamicsizicsizingandFrequentInsertions/刪除,2)儲存的二聚體和3)MemoryFeliceFiceForceforseforsparsedata,butmayhaveslightperformancecostsinclentoperations。

如何將Python數組轉換為Python列表?如何將Python數組轉換為Python列表?May 01, 2025 am 12:05 AM

toConvertapythonarraytoalist,usEthelist()constructororageneratorexpression.1)intimpthearraymoduleandcreateanArray.2)USELIST(ARR)或[XFORXINARR] to ConconverTittoalist,請考慮performorefformanceandmemoryfformanceandmemoryfformienceforlargedAtasetset。

當Python中存在列表時,使用數組的目的是什麼?當Python中存在列表時,使用數組的目的是什麼?May 01, 2025 am 12:04 AM

choosearraysoverlistsinpythonforbetterperformanceandmemoryfliceSpecificScenarios.1)largenumericaldatasets:arraysreducememoryusage.2)績效 - 臨界雜貨:arraysoffersoffersOffersOffersOffersPoostSfoostSforsssfortasssfortaskslikeappensearch orearch.3)testessenforcety:arraysenforce:arraysenforc

說明如何通過列表和數組的元素迭代。說明如何通過列表和數組的元素迭代。May 01, 2025 am 12:01 AM

在Python中,可以使用for循環、enumerate和列表推導式遍歷列表;在Java中,可以使用傳統for循環和增強for循環遍歷數組。 1.Python列表遍歷方法包括:for循環、enumerate和列表推導式。 2.Java數組遍歷方法包括:傳統for循環和增強for循環。

什麼是Python Switch語句?什麼是Python Switch語句?Apr 30, 2025 pm 02:08 PM

本文討論了版本3.10中介紹的Python的新“匹配”語句,該語句與其他語言相同。它增強了代碼的可讀性,並為傳統的if-elif-el提供了性能優勢

Python中有什麼例外組?Python中有什麼例外組?Apr 30, 2025 pm 02:07 PM

Python 3.11中的異常組允許同時處理多個異常,從而改善了並發方案和復雜操作中的錯誤管理。

Python中的功能註釋是什麼?Python中的功能註釋是什麼?Apr 30, 2025 pm 02:06 PM

Python中的功能註釋將元數據添加到函數中,以進行類型檢查,文檔和IDE支持。它們增強了代碼的可讀性,維護,並且在API開發,數據科學和圖書館創建中至關重要。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境