基於 Python 的網絡爬蟲:爬取網站指定頁數的圖片

爬取網站指定頁數的圖片

(http://www.budejie.com/pic/)

需要提前掌握XPATH的相關知識!

import requests
from lxml import etree
from urllib.request import urlretrieve

# 函數作用:
# 對頁面發起請求並接收響應的內容
def getpage(url,headers):
    # 對指定的地址發起請求
    response = requests.get(url,headers = headers)
    # 把響應的內容轉換成可以使用的XPATH匹配的內容
    html = etree.HTML(response.text)
    # 返回轉換的結果
    return html

# 函數作用:
# 在響應內容中提取所需數據
def parsepage(url,headers):
    html = getpage(url,headers)
    # 獲取圖片的路徑
    img_list = html.xpath('//ul/li')
    for img in img_list:
        src = img.xpath("//div[@class='j-r-list-c']/div[@class='j-r-list-c-img']/a/img/@data-original")
        name = img.xpath("//div[@class='j-r-list-c']/div[@class='j-r-list-c-img']/a/img/@title")
        # print(name)
        # print(src)

    # 定義一個用來接收圖片名稱的列表(後綴名)
    form = []
    # 提取圖片的名稱,並添加到form列表當中
    for p in src:
        form.append(p.split("/")[-1])
    # print(form)
    # 返回圖片路徑和圖片名稱
    return src,name,form


if __name__ == '__main__':
    # 定製請求頭(只添加了瀏覽器信息)
    headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
    }

    # 下載並保存前10頁的圖片
    for i in range(1,11):
        url = "http://www.budejie.com/pic/%s"%i
        src,name,form = parsepage(url,headers)
        for u in src:
            for f in form:
                # print(f)
                # 當對應圖片路徑和對應圖片的名稱索引一致時保存
                if src.index(u) == form.index(f):
                    print("正在下載:%s"%name[src.index(u)])
                    urlretrieve(u, "./images/"+f)
                else:
                    continue

 

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