Python爬蟲入門指南(一)

有問題的朋友歡迎關注我的公衆號 拇指筆記 與我一同交流。本人一定做到知無不言

0. 本文內容

最近想寫一個爬取中國天氣網的爬蟲。所以打算寫一個關於爬蟲的系列教程,本文介紹爬蟲的基礎知識和簡單使用。

  1. 獲取HTML文件
  2. Beautiful Soup4庫安裝
  3. Beautiful Soup4對象類型說明
  4. 爬取網頁標題
  5. 爬取網頁圖片

1. 關於爬蟲

維基百科是這樣解釋爬蟲的。

網絡爬蟲(又被稱爲網頁蜘蛛,網絡機器人,在FOAF社區中間,更經常的稱爲網頁追逐者),是一種按照一定的規則,自動的抓取萬維網信息的程序或者腳本。

實現一個爬蟲,大概只需要三步

  1. 根據url獲取HTML數據
  2. 解析獲取到的HTML數據,獲取信息
  3. 存儲數據

1.1 獲取HTML文件

HTML是創建網頁的標記語言,其中嵌入了文本、圖像等數據,然後被瀏覽器讀取並渲染成我們看到的網頁的樣子。

使用python內置庫urllib中的urlopen函數,就可以根據url獲取HTML文件。

1.1.1 HTML標籤

在HTML中 用於標記的符號稱爲超文本標記語言標籤,HTML標籤的組成如下。

  1. HTML標籤以尖括號標識標籤名稱,如<title>
  2. 大多數HTML標籤是成對存在的(開始標籤和結束標籤),如<head>,</head>
  3. 也有極少數單獨存在的標籤,如<br/>,<hr/>
  4. 標籤中還可以添加屬性值。

1.1.2 實現方法

這裏以中國天氣網爲例,使用python內置庫urllib中的urlopen函數獲取該網站的HTML文件。

from urllib.request import urlopen
#使用urlopen獲取一個網頁的內容
html = urlopen("http://www.weather.com.cn/")
#獲取一個網頁html內容,並使用decode將其轉化爲字符串
html_text = bytes.decode(html.read())
print(html_text)

獲取到的HTML文件

1.2 解析HTML文件

讀取到網頁內容後,需要在HTML文件中找到我們需要的信息。這裏使用BeautifulSoup庫來實現這個功能。

Beautiful庫的官網介紹如下

Beautiful Soup提供一些簡單的、python式的函數用來處理導航、搜索、修改分析樹等功能。它是一個工具箱,通過解析文檔爲用戶提供需要抓取的數據,因爲簡單,所以不需要多少代碼就可以寫出一個完整的應用程序。

1.2.1 Beautiful Soup4庫安裝

目前Beautiful Soup4已經被移植到BS4中了,所以安裝使用如下命令,我這裏使用的清華源。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple bs4

安裝成功後,cmd中會顯示

Successfully built bs4
Installing collected packages: bs4
Successfully installed bs4-0.0.1

現在在jupyter裏使用如下代碼測試一下是否成功安裝。一定要注意大寫

from bs4 import BeautifulSoup

1.2.2 Beautiful Soup4中的對象

Beautiful Soup4將HTML文檔轉換成樹形結構,每個節點都是Python對象。這些對象可以歸爲4類

  1. Tag:HTML中的標籤加上標籤內的內容(例如下面的爬取標題)。

    它有兩個屬性(name和attrs),name用來獲取標籤的名稱;attrs用來獲取屬性。

  2. NavigableString :標籤內部文字的屬性。

    使用.string可以獲得標籤內的文字內容

  3. BeautifulSoup :表示一個文檔的全部內容。

  4. Comment 特殊的NavigableString對象。

1.2.3 獲取網頁標題

還是以剛纔的中國天氣網爲例,現在我們來爬取它的標題。

from bs4 import  BeautifulSoup as bf
from urllib.request import urlopen
html = urlopen("http://www.weather.com.cn/")
obj = bf(html.read(),'html.parser')
title = obj.head.title
print(title)

爬取到的信息如下

<title>首頁-中國天氣網</title>

1.2.4 獲取網頁圖片

獲取網頁中的一張圖片步驟如下

  1. 使用BeautifulSoup中的findall方法獲取網頁所有圖片的url。
  2. 根據圖片的地址,使用 urllib.urlretrieve函數下載圖片。

圖片信息一般都包含在’img’標籤中,所以我們通過find_all('img')來爬取網頁的圖片信息。

from bs4 import  BeautifulSoup as bf
from urllib.request import urlopen
#使用urlopen獲取一個網頁的內容
html = urlopen("http://www.weather.com.cn/")
#解析HTML文件
obj = bf(html.read(),'html.parser')
#獲取網頁中圖片文件的信息
pic = obj.find_all('img')
#輸出所有圖片信息
for i in pic:
    print(i)

爬取到的圖片信息如下

可以看到,圖片的屬性有class、src和長寬等,src代表鏈接地址。

得到圖片信息後,需要提取圖片鏈接來下載(這裏我選的第五張圖片),

url = pic[4]['src']

然後使用urllib.urlretrieve函數下載圖片。

urllib.urlretrieve(url, '1.png')

完整程序如下

from bs4 import  BeautifulSoup as bf
from urllib.request import urlopen
from urllib.request import urlretrieve
#使用urlopen獲取一個網頁的內容
html = urlopen("http://www.weather.com.cn/")

obj = bf(html.read(),'html.parser')
title = obj.head.title
pic = obj.find_all('img')
#print (obj.prettify())
url = pic[4]['src']
urlretrieve(url, 'pachong1.png')
print(title)
print(url)

爬取到的圖片


有問題的朋友歡迎關注我的公衆號 拇指筆記 與我一同交流。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章