1. 程式人生 > >Python:關於爬蟲(2)

Python:關於爬蟲(2)

open request 進行 chrom pen -i 它的 chrome quest

這個案例主要是用於抓取妹子圖片

推薦網址:http://jandan.net/ooxx

當我們切換圖片的時候,會發現地址欄裏面只有頁碼數在發生變化,其他的都沒有改變

技術分享圖片
我們通過審查元素可以看到,最新的頁碼其實是保存在一個span標簽裏面的,我們可以通過它的class屬性去獲取最新的頁面

技術分享圖片
圖片都存在於img標簽裏面,通過src屬性可以看到圖片的來源,獲得這些信息之後我們就可以通過img這個關鍵部分來進行相關搜索

技術分享圖片
我們先來抓取前十頁的圖片

import urllib.request # 訪問網頁必須用到這個
import os


def url_open(url):
    req = urllib.request.Request(url)
    req.add_header(‘User-Agent‘,‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36‘)
    response = urllib.request.urlopen(req)
    html = response.read()
    return html


def get_page(url):
    """
    :param url:
    :return: 頁碼數【字符串類型】
    """
    html = url_open(url).decode(‘utf-8‘)
    # 加上偏移量
    a = html.find(‘current-comment-page‘)+23
    b = html.find(‘]‘, a)
    return html[a:b]


def find_imgs(url):
    html = url_open(url).decode(‘utf-8‘)
    img_addrs = []

    a = html.find(‘img src=‘)
    while a != -1:
        b = html.find(‘.gif‘, a, a+140)
        if b != -1:
            if html[a+9] != ‘h‘:
                img_addrs.append(‘http:‘ + html[a+9:b+4])
            else:
                img_addrs.append(html[a+9:b+4])
        else:
            b = a + 9
        a = html.find(‘img src=‘, b)

    return img_addrs


def save_imgs(folder, img_addrs):
    for each in img_addrs:
        # 通過/切分字符串,獲取圖片名稱
        filename = each.split(‘/‘)[-1]
        # 寫入文件夾
        with open(filename, ‘wb‘) as f:
            img = url_open(each)
            f.write(img)


def download_mm(folder=‘OOXX‘, pages=10):
    """
    :param folder: 文件夾名稱
    :param pages: 下載頁數
    :return:
    """
    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)+‘#comments‘
        img_addrs = find_imgs(page_url)
        save_imgs(folder, img_addrs)


if __name__ == ‘__main__‘:
    download_mm()

執行這段代碼,我們就能從自己創建的文件夾裏面找到我們抓取到的圖片,除此之外為了避免ip的頻繁訪問而導致的一些問題,我們還可以通過上節的內容[http://www.jianshu.com/p/6754f4eb067a],使用代理ip來進行處理。
技術分享圖片

Python:關於爬蟲(2)