Python 網絡爬蟲入門:Spider man的第一課
- 寫在最前面
- 背景知識介紹
- 蛛絲發射器——Request庫
- 智能眼鏡——Beautiful Soup庫
- 第一課總結
寫在最前面
有位粉絲希望學習網絡爬蟲的實戰技巧,想嘗試搭建自己的爬蟲環境,從網上抓取數據。
前面有寫一篇博客分享,但是內容感覺太淺顯了
【一個超簡單的爬蟲demo】探索新浪網:使用 Python 爬蟲獲取動態網頁數據
本期邀請了擅長爬蟲的朋友@PoloWitty,來撰寫這篇博客。通過他的專業視角和實戰經驗,一步步引導我們入門,成為一名數據探索的“Spider Man”。
【Python網絡爬蟲入門教程1】成為“Spider Man”的第一課:HTML、Request庫、Beautiful Soup庫
【Python網絡爬蟲入門教程2】成為“Spider Man”的第二課:觀察目標網站、代碼編寫
隨著互聯網數據的指數級增長,了解如何有效地提取這些信息變得越來越重要。無論是文本模型如ChatGPT,還是視覺模型如Stable Diffusion,它們的訓練數據大多來源于互聯網的海量數據。在這個日新月異的大數據時代,爬蟲也算是其中不得不點的一項基礎技能樹了。
本系列文章將深入淺出地介紹Python網絡爬蟲的基礎知識和技術,從 Requests 庫到 Scrapy 框架的 入門級
使用,為你開啟python網絡爬蟲的大門,成為spider man的一員,并最終以ScrapeMe網站作為目標示例,爬取下網站上的可愛又有趣的寶可夢照片。
在開始之前,還要啰嗦幾句疊個甲,網絡爬蟲雖然強大,但在使用時必須遵守法律法規和網站的爬蟲協議。不違法爬取數據,遵守相關法律法規哦~
這是本系列的第一篇文章,將會介紹在編寫網絡爬蟲的過程中需要了解的互聯網前端背景知識,以及兩個簡潔易用的相關庫的使用。
通過本教程,你將學會如何開始使用Python進行網絡爬蟲,從而在這個數據驅動的時代中,更好地利用可用的網絡資源。我們期待看到你成為一名數據探索的“Spider Man”!
歡迎在評論分享在爬蟲中遇到的問題,讓我們一起討論和學習!
背景知識介紹
要成功編寫一個Python爬蟲,關鍵在于對目標網站進行精確的定制化設計。同時,面對常見的反爬蟲機制,你還需要具備應對策略的準備。Python爬蟲的技能樹廣泛而深入,即使是最基礎的爬蟲,也涉及到HTML、CSS和JavaScript等前端知識。在此,我們將簡要介紹這些基礎知識,為你的爬蟲之旅打下堅實的基礎。
HTML是網頁構建的骨架,通過各種標記語言來定義頁面內容。比如<img>
標簽用來標記圖像,<a>
標簽用來標記鏈接,而文本可以用<p>
(段落)或者<h1>
到<h6>
(標題)來標記,在爬取的過程中就需要根據這些來對內容進行篩選。CSS則是美化大師,最常用的就是給HTML中的元素加上類名(class)來定義樣式。比如,你可以給所有標題元素指定相同的樣式,這樣就能保持一致風格。
接下來是JS,它讓頁面動起來!一個常見的用法是使用document.getElementBy
這類方法獲取頁面上的元素。比如,document.getElementById('someId')
可以獲取帶有特定ID的元素,而document.getElementsByClassName('someClass')
可以獲取所有擁有相同類名的元素。通過這些方法,你能輕松捕獲頁面上的各種東西,讓爬蟲更精準地抓取你需要的信息!
當然,這里提到的都只是在編寫爬蟲的過程中可能最經常會用到的相關知識,如果想要獲取更多相關內容,可以在網上搜索相關系列課程進行學習(比如菜鳥教程),這里就不再深入展開了。
接下來咱們來看看在編寫爬蟲過程中我們會用到的第一個庫:request庫。
蛛絲發射器——Request庫
現在,咱們來談談requests
庫。requests
庫就像是蜘蛛俠的蛛絲發射器!想象一下,蜘蛛俠用蛛絲發射器輕松地抓住高樓大廈上的東西,requests
庫也能輕松地抓取網頁上的數據!
就像蜘蛛俠能迅速把蛛絲射向目標一樣,requests.get()
方法能迅速向網站發出請求,抓取你想要的信息。而且,就像蜘蛛俠可以根據需要調整蛛絲的力度和角度一樣,你也可以用requests
庫的不同參數調整請求,讓它更適合你的需求!
有時候,你得給服務器點提示,告訴它你是誰。那就用requests
的headers
參數,就像是在門口留個便條一樣。而且,如果你要往網站發送數據,比如登錄信息或者表單內容,requests
庫也能搞定!
下面來舉個例子實操一下:
import requests
import jsonurl = 'http://t.weather.sojson.com/api/weather/city/101010100'
response = requests.get(url) # 發送請求并得到返回結果obj = json.loads(response.text) # 加載獲取的json格式數據
print(obj)
通過上面的代碼,就可以利用天氣api獲取到北京市的天氣。然后這個api返回的內容其實是個json格式的對象,我們可以使用json.loads()
方法將其加載為一個python對象。
好了,學習到這里,你其實就已經可以利用request庫和一些api服務設計出一些很炫酷的東西了hhh,比方說利用天氣的api再加上一些網頁的前端知識,你也可以自己做一個天氣預報程序了 ^o^/
但是,如果有小伙伴嘗試把上面的url換成https://www.baidu.com
,可能就會發現response.text
獲取到的東西有點怪異。別慌!這是因為網頁的內容以一種和平常不一樣的編碼形式展現出來了。
幸運的是,這時就該請出BeautifulSoup
登場了!就像spider man的智能眼鏡一樣,BeautifulSoup
庫能幫你將那些亂七八糟的字符瞬間變成你看得懂的語言,讓你輕松讀懂網頁的內容!
智能眼鏡——Beautiful Soup庫
當直接使用request庫去請求https://www.baidu.com
時,返回的其實是網頁的文本表示,大家一般會使用DOM(文檔對象模型)來對它進行解釋。當你在瀏覽器中打開一個網頁時,瀏覽器會下載網頁的HTML、CSS和JavaScript文件,然后解析這些文件,構建成一個DOM樹。這個樹形結構代表了網頁的層級結構,比如標題、段落、鏈接等等元素以及它們的嵌套關系。
而 Beautiful Soup
就是專為網頁解析設計的,它對于DOM(文檔對象模型)樹的解析簡直游刃有余。用Beautiful Soup
,你可以像操作樹一樣操作這個DOM樹,輕松找到你想要的內容。比如,你可以用find()
或find_all()
方法按標簽名或者類名查找元素,就像在樹中找到特定類型的分支一樣。
如果我們拿百度頁面舉例,假設你想找到其中所有的鏈接,現在就可以用類似這樣的代碼來進行實現:
import requests
from bs4 import BeautifulSoupurl = 'https://www.baidu.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')# 找到所有的鏈接
links = soup.find_all('a')# 輸出所有鏈接的地址
for link in links:print(link.get('href'))
除了獲取所有的鏈接,我們還可以利用bs4實現各種各樣的功能,比方說,我們如果將上面的代碼中的'a'
替換成'img'
,將'href'
替換成'src'
,我們便可以獲取到百度頁面中所有圖片的鏈接,如果再利用request庫對這些鏈接地址進行一下請求,我們就可以輕松的爬取下該頁面下所有的圖片了!
第一課總結
通過本系列教程的第一課,你應該已經了解到了使用python編寫爬蟲的一些基礎知識,并且對于requests庫和Beautiful Soup庫有了一定的認識。利用本節課上學到的知識,你就已經可以編寫一些簡單的爬蟲程序啦 ^ o^y
在下一課中,將會利用本堂課上學到的基礎知識,使用requests庫和Beautiful Soup庫編寫針對寶可夢圖片的簡單版爬蟲程序。
歡迎持續關注本系列課程!
簡單的爬蟲程序啦 ^ o^y
在下一課中,將會利用本堂課上學到的基礎知識,使用requests庫和Beautiful Soup庫編寫針對寶可夢圖片的簡單版爬蟲程序。
歡迎持續關注本系列課程!