python爬蟲系列之 xpath實戰(zhàn):批量下載壁紙

一、前言

在開始寫爬蟲之前,我們先了解一下爬蟲

首先,我們需要知道爬蟲是什么,這里直接引用百度百科的定義

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

這些還不夠,我們還需要知道爬蟲爬取數(shù)據(jù)的基本步驟。

爬蟲爬取數(shù)據(jù)一般分為三個步驟

  1. 獲取網(wǎng)頁

    巧婦難為無米之炊。我們需要的是數(shù)據(jù)全在網(wǎng)頁里,拿不到網(wǎng)頁,代碼敲得再好也沒用。所以一個爬蟲的第一步一定是獲取網(wǎng)頁。

  2. 提取信息

    拿到網(wǎng)頁之后,我們要做的就是分析網(wǎng)頁結構,定位要爬取的信息,然后提取出來

  3. 保存信息

    獲得信息之后,一般需要把信息保存起來以便下次使用

完成上面三步一個簡單的爬蟲就寫好了( ̄▽ ̄)",下面開始寫壁紙爬蟲

二、開始寫爬蟲

我們要爬取的目標網(wǎng)站是:http://www.netbian.com/,這個網(wǎng)站長這樣:

picture-1

紅色方框里的就是我們要爬取的圖片。

在動手寫代碼之前,我們要先理一理思路,這樣可以讓思路更清晰,寫代碼時就會更流暢,代碼也更簡潔。

對于一個爬蟲腳本,我們一般需要考慮以下幾點:

  1. 爬什么:我們要從網(wǎng)頁上獲取的數(shù)據(jù)是什么
  2. 怎么爬:用什么庫?是否需要使用框架?有沒有 ajax接口?
  3. 爬取步驟:哪個先爬,哪個后爬

以我們的項目為例:

  1. 爬什么:

    我們的目標是下載網(wǎng)頁中的圖片,要下載圖片就要先獲得圖片的地址,而圖片的地址就在網(wǎng)頁中。

    所以我們需要爬取網(wǎng)頁中圖片的地址。

  2. 怎么爬:

    圖片在幾十到幾百張之間,下載量不大,不需要使用框架,直接使用 requests庫。

    解析網(wǎng)頁使用 xpath。

  3. 爬取步驟:

    第一步:分析網(wǎng)頁,寫出圖片的 xpath路徑

    第二步:用 requests庫獲取網(wǎng)頁

    第三步:使用 lxml庫解析網(wǎng)頁

    第四步:通過 xpath獲得圖片鏈接

    第五步:下載圖片

    第六步:命名并保存圖片

分析完之后,就開始爬取了!

首先第一步,分析網(wǎng)頁,在瀏覽器里打開網(wǎng)頁,按下 F12進入開發(fā)者模式,選擇 Elements選項卡,如圖:

picture-2

使用元素選擇器:

picture-3

找到標簽后,我們就可以寫出標簽的 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)

運行結果:

picture-4

這樣我們就完成了一個簡易版的壁紙爬蟲,為什么說是簡易版呢,理由如下:

  1. 圖片太小了,根本不能用作壁紙(其實是我偷懶了( ̄▽ ̄)"),要獲取高清壁紙的話,還需要點擊圖片進入下一個頁面,簡單起見我直接爬了首頁的縮略圖。
  2. 不能自動翻頁,運行一次只能下載一頁的圖片,翻頁可以獲取網(wǎng)頁中下一頁的鏈接,或者尋找網(wǎng)址的變化規(guī)律

有興趣的朋友可以繼續(xù)完善上面兩個問題,可以把問題發(fā)在評論區(qū),我會一一查看的。

上一篇:python爬蟲系列之 xpath:html解析神器
下一篇:python爬蟲系列之 html頁面解析:如何寫 xpath路徑

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容