小白如何入門 Python 爬蟲?
小白如何入門 Python 爬蟲?
本文針對初學者,我會用最簡單的案例告訴你如何入門python爬蟲!
想要入門Python 爬蟲首先需要解決四個問題
熟悉python編程
了解HTML
了解網(wǎng)絡爬蟲的基本原理
學習使用python爬蟲庫
一、你應該知道什么是爬蟲?
網(wǎng)絡爬蟲,其實叫作網(wǎng)絡數(shù)據(jù)采集更容易理解。
就是通過編程向網(wǎng)絡服務器請求數(shù)據(jù)(HTML表單),然后解析HTML,提取出自己想要的數(shù)據(jù)。
歸納為四大步:
根據(jù)url獲取HTML數(shù)據(jù)
解析HTML,獲取目標信息
存儲數(shù)據(jù)
重復第一步
這會涉及到數(shù)據(jù)庫、網(wǎng)絡服務器、HTTP協(xié)議、HTML、數(shù)據(jù)科學、網(wǎng)絡安全、圖像處理等非常多的內容。但對于初學者而言,并不需要掌握這么多。
二、python要學習到什么程度
如果你不懂python,那么需要先學習python這門非常easy的語言(相對其它語言而言)。
編程語言基礎語法無非是數(shù)據(jù)類型、數(shù)據(jù)結構、運算符、邏輯結構、函數(shù)、文件IO、錯誤處理這些,學起來會顯枯燥但并不難。
剛開始入門爬蟲,你甚至不需要去學習python的類、多線程、模塊之類的略難內容。找一個面向初學者的教材或者網(wǎng)絡教程,花個十幾天功夫,就能對python基礎有個三四分的認識了,這時候你可以玩玩爬蟲嘍!
先說下python入門,實在是太容易了,因為語法簡單,思維與人類的思維很相近。入門的時候,別整天想著看很多資料,網(wǎng)上各種找,最后都留在了收藏夾吃灰。其實對于剛接觸編程的小白而言,最容易卡在安裝Python環(huán)境和實操代碼這一步。建議一開始先試試一些學習網(wǎng)站的免費課程,大概了解下Python的基礎知識,打好扎實的基礎后再上手學爬蟲。
當然,前提是你必須在這十幾天里認真敲代碼,反復咀嚼語法邏輯,比如列表、字典、字符串、if語句、for循環(huán)等最核心的東西都得捻熟于心、于手。
教材方面比較多選擇,我個人是比較推薦python官方文檔以及python簡明教程,前者比較系統(tǒng)豐富、后者會更簡練。
三、為什么要懂HTML
前面說到過爬蟲要爬取的數(shù)據(jù)藏在網(wǎng)頁里面的HTML里面的數(shù)據(jù),有點繞哈!
維基百科是這樣解釋HTML的
超文本標記語言(英語:HyperTextMarkupLanguage,簡稱:HTML)是一種用于創(chuàng)建網(wǎng)頁的標準標記語言。HTML是一種基礎技術,常與CSS、JavaScript一起被眾多網(wǎng)站用于設計網(wǎng)頁、網(wǎng)頁應用程序以及移動應用程序的用戶界面[3]。網(wǎng)頁瀏覽器可以讀取HTML文件,并將其渲染成可視化網(wǎng)頁。HTML描述了一個網(wǎng)站的結構語義隨著線索的呈現(xiàn),使之成為一種標記語言而非編程語言。
總結一下,HTML是一種用于創(chuàng)建網(wǎng)頁的標記語言,里面嵌入了文本、圖像等數(shù)據(jù),可以被瀏覽器讀取,并渲染成我們看到的網(wǎng)頁樣子。
所以我們才會從先爬取HTML,再 解析數(shù)據(jù),因為數(shù)據(jù)藏在HTML里。
學習HTML并不難,它并不是編程語言,你只需要熟悉它的標記規(guī)則,這里大致講一下。
HTML標記包含標簽(及其屬性)、基于字符的數(shù)據(jù)類型、字符引用和實體引用等幾個關鍵部分。
HTML標簽是最常見的,通常成對出現(xiàn),比如<h1>
與</h1>
。
這些成對出現(xiàn)的標簽中,第一個標簽是開始標簽,第二個標簽是結束標簽。兩個標簽之間為元素的內容(文本、圖像等),有些標簽沒有內容,為空元素,如<img>
。
以下是一個經(jīng)典的Hello World程序的例子:
<!DOCTYPE html> <html> ?<head> ? ?<title>This is a title</title> ?</head> ?<body> ? ?<p>Hello world!</p> ?</body> </html>
HTML文檔由嵌套的HTML元素構成。它們用HTML標簽表示,包含于尖括號中,如<p>
[56]
在一般情況下,一個元素由一對標簽表示:“開始標簽”<p>
與“結束標簽”</p>
。元素如果含有文本內容,就被放置在這些標簽之間。
四、了解python網(wǎng)絡爬蟲的基本原理
在編寫python爬蟲程序時,只需要做以下兩件事:
發(fā)送GET請求,獲取HTML
解析HTML,獲取數(shù)據(jù)
這兩件事,python都有相應的庫幫你去做,你只需要知道如何去用它們就可以了。
五、用python庫爬取百度首頁標題和圖片
首先,發(fā)送HTML數(shù)據(jù)請求可以使用python內置庫urllib,該庫有一個urlopen函數(shù),可以根據(jù)url獲取HTML文件,這里嘗試獲取百度首頁“https://www.baidu.com/”的HTML內容
# 導入urllib庫的urlopen函數(shù) from urllib.request import urlopen # 發(fā)出請求,獲取html html = urlopen("https://www.baidu.com/") # 獲取的html內容是字節(jié),將其轉化為字符串 html_text = bytes.decode(html.read()) # 打印html內容 print(html_text)
看看效果:

我們看一下真正百度首頁html是什么樣的,如果你用的是谷歌瀏覽器,在百度主頁打開設置>更多工具>開發(fā)者工具,點擊element,就可以看到了:

對比一下你就會知道,剛才通過python程序獲取到的HTML和網(wǎng)頁中的一樣!
獲取了HTML之后,接下就要解析HTML了,因為你想要的文本、圖片、視頻都藏在HTML里,你需要通過某種手段提取需要的數(shù)據(jù)。
python同樣提供了非常多且強大的庫來幫助你解析HTML,這里以著名的python庫BeautifulSoup為工具來解析上面已經(jīng)獲取的HTML。
BeautifulSoup是第三方庫,需要安裝使用。在命令行用pip安裝就可以了:
pip install bs4
BeautifulSoup會將HTML內容轉換成結構化內容,你只要從結構化標簽里面提取數(shù)據(jù)就OK了:

比如,我想獲取百度首頁的標題“百度一下,我就知道”,怎么辦呢?
這個標題是被兩個標簽套住的,一個是一級標簽<head><head>,另一個是二級標簽<title><title>,所以只要從標簽中取出信息就可以了

# 導入urlopen函數(shù) from urllib.request import urlopen # 導入BeautifulSoup from bs4 import BeautifulSoup as bf # 請求獲取HTML html = urlopen("https://www.baidu.com/") # 用BeautifulSoup解析html obj = bf(html.read(),'html.parser') # 從標簽head、title里提取標題 title = obj.head.title # 打印標題 print(title)
看看結果:

這樣就搞定了,成功提取出百度首頁的標題。
如果我想要下載百度首頁logo圖片呢?
第一步先獲取該網(wǎng)頁所有圖片標簽和url,這個可以使用BeautifulSoup的findAll方法,它可以提取包含在標簽里的信息。
一般來說,HTML里所有圖片信息會在“img”標簽里,所以我們通過findAll("img")就可以獲取到所有圖片的信息了。
# 導入urlopen from urllib.request import urlopen # 導入BeautifulSoup from bs4 import BeautifulSoup as bf # 請求獲取HTML html = urlopen("https://www.baidu.com/") # 用BeautifulSoup解析html obj = bf(html.read(),'html.parser') # 從標簽head、title里提取標題 title = obj.head.title # 使用find_all函數(shù)獲取所有圖片的信息 pic_info = obj.find_all('img') # 分別打印每個圖片的信息 for i in pic_info: ? ?print(i)
看看結果:

打印出了所有圖片的屬性,包括class(元素類名)、src(鏈接地址)、長寬高等。
其中有百度首頁logo的圖片,該圖片的class(元素類名)是index-logo-src。

[<img class="index-logo-src" height="129" hidefocus="true" src="//www.baidu.com/img/bd_logo1.png" usemap="#mp" width="270"/>, <img alt="到百度首頁" class="index-logo-src" src="//www.baidu.com/img/baidu_jgylogo3.gif" title="到百度首頁"/>]
可以看到圖片的鏈接地址在src這個屬性里,我們要獲取圖片鏈接地址:
# 導入urlopen from urllib.request import urlopen # 導入BeautifulSoup from bs4 import BeautifulSoup as bf # 請求獲取HTML html = urlopen("https://www.baidu.com/") # 用BeautifulSoup解析html obj = bf(html.read(),'html.parser') # 從標簽head、title里提取標題 title = obj.head.title # 只提取logo圖片的信息 logo_pic_info = obj.find_all('img',class_="index-logo-src") # 提取logo圖片的鏈接 logo_url = "https:"+logo_pic_info[0]['src'] # 打印鏈接 print(logo_url)
結果:

獲取地址后,就可以用urllib.urlretrieve函數(shù)下載logo圖片了
# 導入urlopen from urllib.request import urlopen # 導入BeautifulSoup from bs4 import BeautifulSoup as bf # 導入urlretrieve函數(shù),用于下載圖片 from urllib.request import urlretrieve # 請求獲取HTML html = urlopen("https://www.baidu.com/") # 用BeautifulSoup解析html obj = bf(html.read(),'html.parser') # 從標簽head、title里提取標題 title = obj.head.title # 只提取logo圖片的信息 logo_pic_info = obj.find_all('img',class_="index-logo-src") # 提取logo圖片的鏈接 logo_url = "https:"+logo_pic_info[0]['src'] # 使用urlretrieve下載圖片 urlretrieve(logo_url, 'logo.png')
最終圖片保存在'logo.png'

六、結語
本文用爬取百度首頁標題和logo圖片的案例,講解了python爬蟲的基本原理以及相關python庫的使用,這是比較初級的爬蟲知識,還有很多優(yōu)秀的python爬蟲庫和框架等待后續(xù)去學習。
房子一層一層蓋,知識一點一點學。剛接觸Python的同學還是要打好基礎,自己上手實操↓ 話不多說,上干貨!最近發(fā)現(xiàn)了一個接近免費的Python課程,在裙上教學基礎知識+實操代碼,比較適合小白學習,比找資料自學高效多了。最后分享給你們,在評論區(qū)下留言“拿來吧“就可以領?。?/p>