Python--爬虫练手(妹纸图)

小甲鱼爬虫教程-爬取妹纸图

最近看了小甲鱼的爬虫教程,其中有一个是不使用Scrapy框架去爬取一个图片网的妹纸图系列的练手项目,但是现在距教程已经年代久远,图片网的网页框架已经和教程里面的不太一样,为了练习一下爬虫技术,记录一下这个爬取过程。

话不多说,直接post代码:(比较怕麻烦,代码说明放在注释)

import os
import urllib
import time

def url_open(url): #打开指定的网址进行获取资源(不在这里进行解码)
    
    headers={
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
            }
    
    req = urllib.request.Request(url)
    
    req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36')
    
    response = urllib.request.urlopen(req)
    
    html = response.read()
    
    return html

def get_pages(url): #获取页面的编号(每个页面都对应一个图片)
    html = url_open(url).decode('utf-8')
    page_index1 = html.find('a href="/t/')+11
    page_index2 = html.find('"',page_index1)
    print(html[page_index1:page_index2])
    return html[page_index1:page_index2]

    

def find_imgs(url2): #根据网页信息去爬取照片的网络地址
    html = url_open(url2).decode('utf-8')
    img_index1 = html.find('img src=')
    
   # print(html[img_index1:img_index2])
    
    img_addr = []
    #print(imgsrc)

    while img_index1 != -1:
        img_index2 = html.find('.jpg',img_index1,img_index1+255)
        if img_index2 != -1:
            imgsrc = 'http:' + html[img_index1+9:img_index2+4]
            img_addr.append(imgsrc)
        else:   
            img_index2 =img_index1 + 9
            
        img_index1 = html.find('img src=',img_index2)
    
    print(img_addr)
    return img_addr
            
        
def save_imgs(folder,img_addrs): #根据网络地址去爬取照片保存到指定文件夹
    if img_addrs:
        for each in img_addrs:
            filename = each.split('/')[-1]
            imgdata = url_open(each)
            fd = open(filename,'wb')
            fd.write(imgdata)
            fd.close()
            
def getDate(): #获取当前时间
    Y = str(time.localtime()[0])
    M = str(time.localtime()[1])
    D = str(time.localtime()[2])
    h = str(time.localtime()[3])
    m = str(time.localtime()[4])
    s = str(time.localtime()[5])
    realTime = Y+'年'+M+'月'+D+'日'+h+'时'+m+'分'+s+'秒'
    return (realTime) 

def download_mm(folder='mm',pages = 10):
    now = getDate()
    folder = 'mm-' + now #记录爬取的时间并且作为文件夹的名字
    os.mkdir(folder)
    os.chdir(folder)
    
    url = 'http://jandan.net/ooxx'
    
    url2 = 'http://jandan.net/t/'
    
    page_url = int(get_pages(url)) #获取最新图片的页面编码
    
    for i in range(pages): #爬 10 张图
        
        page_index = str(page_url)
        
        urlpage = url2 + page_index
        
        page_url -= 1
        
        print(urlpage)
        
        img_addrs = find_imgs(urlpage)
        
        save_imgs(folder,img_addrs) 
        
        time.sleep(2) #不使用代理下,如果爬取速度过快会被拦截IP


download_mm()

最后Po个结果图给大伙瞅瞅
生成的文件夹
Python--爬虫练手(妹纸图)_第1张图片
爬到的妹纸图(手动狗头)
Python--爬虫练手(妹纸图)_第2张图片

你可能感兴趣的:(python)