1. 程式人生 > 實用技巧 >初學者、小白如何入門 Python 爬蟲?

初學者、小白如何入門 Python 爬蟲?

本文針對初學者,我會用最簡單的案例告訴你如何入門python爬蟲!

想要入門Python 爬蟲首先需要解決四個問題

熟悉python程式設計


瞭解HTML

瞭解網路爬蟲的基本原理


學習使用python爬蟲庫

一、你應該知道什麼是爬蟲?

網路爬蟲,其實叫作網路資料採集更容易理解。

就是通過程式設計向網路伺服器請求資料(HTML表單),然後解析HTML,提取出自己想要的資料。

歸納為四大步:

  1. 根據url獲取HTML資料
  2. 解析HTML,獲取目標資訊
  3. 儲存資料
  4. 重複第一步

這會涉及到資料庫、網路伺服器、HTTP協議、HTML、資料科學、網路安全、影象處理等非常多的內容。但對於初學者而言,並不需要掌握這麼多。

二、python要學習到什麼程度

如果你不懂python,那麼需要先學習python這門非常easy的語言(相對其它語言而言)。

程式語言基礎語法無非是資料型別、資料結構、運算子、邏輯結構、函式、檔案IO、錯誤處理這些,學起來會顯枯燥但並不難。

剛開始入門爬蟲,你甚至不需要去學習python的類、多執行緒、模組之類的略難內容。找一個面向初學者的教材或者網路教程,花個十幾天功夫,就能對python基礎有個三四分的認識了,這時候你可以玩玩爬蟲嘍!

如果你處於想學Python或者正在學習Python,Python的教程不少了吧,但是是最新的嗎?說不定你學了可能是兩年前人家就學過的內容,我來分享一波2020最新的Python教程。加入我的學習圈子:810735403,就可以領取學習資料

三、為什麼要懂HTML

前面說到過爬蟲要爬取的資料藏在網頁裡面的HTML裡面的資料,有點繞哈!

維基百科是這樣解釋HTML的

超文字標記語言(英語:HyperTextMarkupLanguage,簡稱:HTML)是一種用於建立網頁的標準標記語言。HTML是一種基礎技術,常與CSS、JavaScript一起被眾多網站用於設計網頁、網頁應用程式以及移動應用程式的使用者介面[3]。網頁瀏覽器可以讀取HTML檔案,並將其渲染成視覺化網頁。HTML描述了一個網站的結構語義隨著線索的呈現,使之成為一種標記語言而非程式語言。

總結一下,HTML是一種用於建立網頁的標記語言,裡面嵌入了文字、影象等資料,可以被瀏覽器讀取,並渲染成我們看到的網頁樣子。

所以我們才會從先爬取HTML,再 解析資料,因為資料藏在HTML裡。

學習HTML並不難,它並不是程式語言,你只需要熟悉它的標記規則,這裡大致講一下。

HTML標記包含標籤(及其屬性)、基於字元的資料型別、字元引用和實體引用等幾個關鍵部分。

HTML標籤是最常見的,通常成對出現,比如<h1></h1>

這些成對出現的標籤中,第一個標籤是開始標籤,第二個標籤是結束標籤。兩個標籤之間為元素的內容(文字、影象等),有些標籤沒有內容,為空元素,如。

以下是一個經典的Hello World程式的例子:

<!DOCTYPE html>
<html>
  <head>
    <title>This is a title</title>
  </head>
  <body>
    <p>Hello world!</p>
  </body>
</html>

很多人學習python,不知道從何學起。


很多人學習python,掌握了基本語法過後,不知道在哪裡尋找案例上手。


很多已經做案例的人,卻不知道如何去學習更加高深的知識。


那麼針對這三類人,我給大家提供一個好的學習平臺,免費領取視訊教程,電子書籍,以及課程的原始碼!


QQ群:810735403

HTML文件由巢狀的HTML元素構成。它們用HTML標籤表示,包含於尖括號中,如<p>[56]

在一般情況下,一個元素由一對標籤表示:“開始標籤”<p>與“結束標籤”</p>。元素如果含有文字內容,就被放置在這些標籤之間。

四、瞭解python網路爬蟲的基本原理

在編寫python爬蟲程式時,只需要做以下兩件事:

  • 傳送GET請求,獲取HTML
  • 解析HTML,獲取資料

這兩件事,python都有相應的庫幫你去做,你只需要知道如何去用它們就可以了。

五、用python庫爬取百度首頁標題和圖片

首先,傳送HTML資料請求可以使用python內建庫urllib,該庫有一個urlopen函式,可以根據url獲取HTML檔案,這裡嘗試獲取百度首頁“https://www.baidu.com/”的HTML內容

# 匯入urllib庫的urlopen函式
from urllib.request import urlopen 
# 發出請求,獲取html
html = urlopen("https://www.baidu.com/")
# 獲取的html內容是位元組,將其轉化為字串
html_text = bytes.decode(html.read())
# 列印html內容
print(html_text)

我們看一下真正百度首頁html是什麼樣的,如果你用的是谷歌瀏覽器,在百度主頁開啟設定>更多工具>開發者工具,點選element,就可以看到了:

對比一下你就會知道,剛才通過python程式獲取到的HTML和網頁中的一樣!

獲取了HTML之後,接下就要解析HTML了,因為你想要的文字、圖片、視訊都藏在HTML裡,你需要通過某種手段提取需要的資料。

python同樣提供了非常多且強大的庫來幫助你解析HTML,這裡以著名的python庫BeautifulSoup為工具來解析上面已經獲取的HTML。

BeautifulSoup是第三方庫,需要安裝使用。在命令列用pip安裝就可以了:

pip install bs4

BeautifulSoup會將HTML內容轉換成結構化內容,你只要從結構化標籤裡面提取資料就OK了:



比如,我想獲取百度首頁的標題“百度一下,我就知道”,怎麼辦呢?

這個標題是被兩個標籤套住的,一個是一級標籤<head><head>,另一個是二級標籤<title><title>,所以只要從標籤中取出資訊就可以了


# 匯入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
# 列印標題
print(title)

看看結果:



這樣就搞定了,成功提取出百度首頁的標題。

如果我想要下載百度首頁logo圖片呢?

第一步先獲取該網頁所有圖片標籤和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函式獲取所有圖片的資訊
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函式下載logo圖片了

# 匯入urlopen
from urllib.request import urlopen
# 匯入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 匯入urlretrieve函式,用於下載圖片
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圖片的案例,講解了python爬蟲的基本原理以及相關python庫的使用,這是比較初級的爬蟲知識,還有很多優秀的python爬蟲庫和框架等待後續去學習。

在這裡還是要推薦下我自己建的Python開發交流學習(qq)群:810735403,群裡都是學Python開發的,如果你正在學習Python ,歡迎你

加入,大家都是軟體開發黨,不定期分享乾貨(只有Python軟體開發相關的),包括我自己整理的一份2021最新的Python進階資料和高階

開發教程,歡迎進階中和想深入Python的小夥伴!