1. 程式人生 > >最新2017年版利用Python3系列基礎知識完成爬蟲指令碼帶完整註釋

最新2017年版利用Python3系列基礎知識完成爬蟲指令碼帶完整註釋

引言

爬蟲已經有很多了,我在網上找了很多,但是都不能執行,於是敲了一份新鮮的,拿出來分享,應該可以直接執行,執行前請檢視python版本。

文章最後更新時間:2017年4月2日 22:13:45

簡介

程式設計IDE:Pycharm 2016.1.2

開發環境:Python 3.6.1

作業系統:Window 7

賞析


原始碼

程式碼註釋已經無比清晰,就不再過多贅述了。
# -*- coding:utf-8 -*-

#
# 爬蟲系列 - http://jandan.net/ooxx/
# 作者:陳魯勇
# 郵箱:[email protected]
# 撰寫時間:2017年4月2日 22:06:54
# Python版本:3.6.1
# CSDN:http://blog.csdn.net/csnd_ayo
#

import urllib.request
import os
import time

# 開啟URL,返回HTML資訊
def open_url(url):
    # 根據當前URL建立請求包
    req = urllib.request.Request(url)
    # 新增頭資訊,偽裝成瀏覽器訪問
    req.add_header('User-Agent',
                   'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36')
    # 發起請求
    response = urllib.request.urlopen(req)
    # 返回請求到的HTML資訊
    return response.read()

# 查詢URL中的下一頁頁碼
def get_page(url):
    # 請求網頁,並解碼
    html=open_url(url).decode('utf-8')
    # 在html頁面中找頁碼
    a=html.find('current-comment-page')+23
    b=html.find(']',a)
    # 返回頁碼
    return html[a:b]

# 查詢當前頁面所有圖片的URL
def find_imgs(url):
    # 請求網頁
    html=open_url(url).decode('utf-8')
    img_addrs=[]
    # 找圖片
    a = html.find('img src=')
    #不帶停,如果沒找到則退出迴圈
    while a != -1:
        # 以a的位置為起點,找以jpg結尾的圖片
        b = html.find('.jpg',a, a+255)
        # 如果找到就新增到圖片列表中
        if b != -1:
            img_addrs.append(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:
        print('download image:%s'%each)
        filename=each.split('/')[-1]
        with open(filename,'wb') as f:
            img=open_url("http:"+each)
            f.write(img)

# 下載圖片
# folder 資料夾字首名
# pages 爬多少頁的資源,預設只爬10頁
def download_mm(folder='woman',pages=10):
    folder+= str(time.time())
    # 建立資料夾
    os.mkdir(folder)
    # 將指令碼的工作環境移動到建立的資料夾下
    os.chdir(folder)

    # 本次指令碼要爬的網站
    url='http://jandan.net/ooxx/'
    # 獲得當前頁面的頁碼
    page_num=int(get_page(url))
    for i in range(pages):
        page_num -= i
        # 建立新的爬蟲頁
        page_url=url+'page-'+str(page_num-1)+'#comments'
        # 爬完當前頁面下所有圖片
        img_addrs=find_imgs(page_url)
        # 將爬到的頁面儲存起來
        save_imgs(img_addrs)

if __name__ == '__main__':
    download_mm()