一、前言
在開始寫爬蟲之前,我們先了解一下爬蟲
首先,我們需要知道爬蟲是什么,這里直接引用百度百科的定義
網(wǎng)絡爬蟲(又被稱為網(wǎng)頁蜘蛛,網(wǎng)絡機器人,在FOAF社區(qū)中間,更經(jīng)常的稱為網(wǎng)頁追逐者),是一種按照一定的規(guī)則,自動地抓取萬維網(wǎng)信息的程序或者腳本。
這些還不夠,我們還需要知道爬蟲爬取數(shù)據(jù)的基本步驟。
爬蟲爬取數(shù)據(jù)一般分為三個步驟
-
獲取網(wǎng)頁
巧婦難為無米之炊。我們需要的是數(shù)據(jù)全在網(wǎng)頁里,拿不到網(wǎng)頁,代碼敲得再好也沒用。所以一個爬蟲的第一步一定是獲取網(wǎng)頁。
-
提取信息
拿到網(wǎng)頁之后,我們要做的就是分析網(wǎng)頁結構,定位要爬取的信息,然后提取出來
-
保存信息
獲得信息之后,一般需要把信息保存起來以便下次使用
完成上面三步一個簡單的爬蟲就寫好了( ̄▽ ̄)",下面開始寫壁紙爬蟲
二、開始寫爬蟲
我們要爬取的目標網(wǎng)站是:http://www.netbian.com/,這個網(wǎng)站長這樣:
紅色方框里的就是我們要爬取的圖片。
在動手寫代碼之前,我們要先理一理思路,這樣可以讓思路更清晰,寫代碼時就會更流暢,代碼也更簡潔。
對于一個爬蟲腳本,我們一般需要考慮以下幾點:
- 爬什么:我們要從網(wǎng)頁上獲取的數(shù)據(jù)是什么
- 怎么爬:用什么庫?是否需要使用框架?有沒有 ajax接口?
- 爬取步驟:哪個先爬,哪個后爬
以我們的項目為例:
-
爬什么:
我們的目標是下載網(wǎng)頁中的圖片,要下載圖片就要先獲得圖片的地址,而圖片的地址就在網(wǎng)頁中。
所以我們需要爬取網(wǎng)頁中圖片的地址。
-
怎么爬:
圖片在幾十到幾百張之間,下載量不大,不需要使用框架,直接使用 requests庫。
解析網(wǎng)頁使用 xpath。
-
爬取步驟:
第一步:分析網(wǎng)頁,寫出圖片的 xpath路徑
第二步:用 requests庫獲取網(wǎng)頁
第三步:使用 lxml庫解析網(wǎng)頁
第四步:通過 xpath獲得圖片鏈接
第五步:下載圖片
第六步:命名并保存圖片
分析完之后,就開始爬取了!
首先第一步,分析網(wǎng)頁,在瀏覽器里打開網(wǎng)頁,按下 F12進入開發(fā)者模式,選擇 Elements選項卡,如圖:

使用元素選擇器:

找到標簽后,我們就可以寫出標簽的 xpath路徑,這個比較簡單,就不詳細寫了。有疑問的可以評論留言。
圖片標簽的 xpath路徑:
#圖片地址
path = '//a[@title]/img/@src'
#為了方便給圖片命名 順便把圖片名字也爬下來
name = '//a[@title]/img/@alt'
接下來就是應用我們所學的時候了,話不多說,直接上代碼:
#-*- coding: utf-8 -*
import requests
from lxml import etree
#網(wǎng)站地址
url = 'http://www.netbian.com/'
#獲取網(wǎng)頁
r = requests.get(url)
r.encoding = r.apparent_encoding
#解析網(wǎng)頁
dom = etree.HTML(r.text)
#獲取圖片 img標簽
#先獲取圖片所在的 img標簽在分別獲取圖片鏈接和名字
img_path = '//a[@title]/img'
imgs = dom.xpath(img_path)
#獲取圖片的鏈接和名字 并下載 命名 保存
for img in imgs:
#xpath 的相對路徑 “.” 代表上一級標簽
#不要忘記 xpath返回的總是列表!
src = img.xpath('./@src')[0]
name = img.xpath('./@alt')[0]
#下載圖片
image = requests.get(src)
#命名并保存圖片
with open(name+'.jpg', 'wb') as f:
f.write(image.content)
運行結果:

這樣我們就完成了一個簡易版的壁紙爬蟲,為什么說是簡易版呢,理由如下:
- 圖片太小了,根本不能用作壁紙(其實是我偷懶了( ̄▽ ̄)"),要獲取高清壁紙的話,還需要點擊圖片進入下一個頁面,簡單起見我直接爬了首頁的縮略圖。
- 不能自動翻頁,運行一次只能下載一頁的圖片,翻頁可以獲取網(wǎng)頁中下一頁的鏈接,或者尋找網(wǎng)址的變化規(guī)律
有興趣的朋友可以繼續(xù)完善上面兩個問題,可以把問題發(fā)在評論區(qū),我會一一查看的。
上一篇:python爬蟲系列之 xpath:html解析神器
下一篇:python爬蟲系列之 html頁面解析:如何寫 xpath路徑