首先確認已經(jīng)安裝Python
安裝requests庫
pip install requests
# Requests 是用Python語言編寫,基于 urllib做入,采用 Apache2 Licensed 開源協(xié)議的 HTTP 庫。
# 它比 urllib 更加方便,可以節(jié)約我們大量的工作而线,完全滿足 HTTP 測試需求。
# Requests 的哲學是以 PEP 20 的習語為中心開發(fā)的恋日,所以它比 urllib 更加 Pythoner膀篮。更重要的一點是它支持 Python3 哦!
# 關(guān)于requests? http://docs.python-requests.org/zh_CN/latest/user/quickstart.html
import requests
import os
#
# 通過url打開鏈接
#
def url_open(url):
? ? headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0'}
? ? return requests.get(url, headers)
#
# 根據(jù)url獲取總頁數(shù)
# 注意:此方法只針對http://jandan.net/ooxx/岂膳,如果是其他頁面誓竿,需要重寫邏輯
#
def get_page(url):
? ? html = url_open(url).text
? ? a = html.find('current-comment-page') + 23
? ? b = html.find(']', a)
? ? return html[a:b]
#
# 根據(jù)url獲取圖片列表
#
def find_imgs(url):
? ? html = url_open(url).text
? ? img_addrs = []
? ? a = html.find('img src=')
? ? while a != -1:
? ? ? ? b = html.find('.jpg', a, a + 255)
? ? ? ? if b != -1:
? ? ? ? ? ? img_addrs.append("http:" + html[a + 9:b + 4])
? ? ? ? else:
? ? ? ? ? ? b = a + 9
? ? ? ? a = html.find('img src', b)
? ? return img_addrs
#
# 下載并保存圖片至當前目錄
#
def save_imgs(img_addrs):
? ? for each in img_addrs:
? ? ? ? filename = each.split('/')[-1]
? ? ? ? with open(filename, 'wb') as f:
? ? ? ? ? ? img = url_open(each).content
? ? ? ? ? ? f.write(img)
#
# 入口方法
#
def download_mm(folder="ooxx"):
? ? if os.path.isdir(folder):
? ? ? ? # os.rmdir(folder)
? ? ? ? print('路徑已存在!~ ')
? ? else:
? ? ? ? # 創(chuàng)建圖片保存路徑
? ? ? ? os.mkdir(folder)
? ? # 改變當前工作目錄(切換至改目錄)
? ? os.chdir(folder)
? ? url = "http://jandan.net/ooxx/"
? ? page_num = int(get_page(url))
? ? print('頁數(shù):', page_num)
? ? total = 0
? ? while (page_num != 0):
? ? ? ? page_url = url + 'page-' + str(page_num) + '#comments'
? ? ? ? img_addrs = find_imgs(page_url)
? ? ? ? # 下載保存圖片
? ? ? ? save_imgs(img_addrs)
? ? ? ? count = len(img_addrs)
? ? ? ? total += count
? ? ? ? print('第', page_num, '頁,共', count, '張', img_addrs)
? ? ? ? page_num -= 1
? ? print('總共圖片:', total, '(張)')
#
# 主入口
#
if __name__ == '__main__':
? ? download_mm()