python3下载妹子图,你懂的。

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

#author:lenglingx@gmail.com
#date:2014-12-08

#coding:utf-8

import os
import sys
import re
import urllib.request
import urllib.parse
from html.parser import HTMLParser

class MyHTMLParser(HTMLParser):
    '''
    网页解析生成一个HTMLParser的类,然后利用这个类,
    把给定的一个网址中所需要的地址解析并保存在该类中,
    然后利用该类的的地址,下载图片。
    '''
    def __init__(self):
        HTMLParser.__init__(self)
        self.links = []
        pass
    def handle_starttag(self,tag,attrs):
        #print("Encountered a start tag:",tag)
        if tag == "img":
            s = []
            for (variable, value) in attrs:
                s.append(value)
            #print("ss:",s)
            self.links.append(s)
            s = []
        pass
    
    def handle_endtag(self,tag):
        #print("Encountered a end tag:",tag)
        pass    
    def handle_data(self,data):
        #print("Encountered some data:",data)
        pass



def geturl(url):
    '''
    打开给定的网页,并返回网页的内容,
    python3中来来是以字节码形式返回的,
    可以根据网页编码判定编码为gb2312,是gbk的子集,
    以字符串形式返回。
    '''
    req = urllib.request.urlopen(url)
    req = req.read()
    return req.decode("gbk")


def continsrc(src):
    '''
    根据网页的内容,找到我们所需要的内容,
    这里主要是有两个需要关注的内容,一个是picture标签,另一个是boxinfo标签。
    '''
    inta = src.find("<div id=\"picture\">")
    #print(inta) 所找的第一个位置点
    intb = src.find("<div class=\"boxinfo\">")
    #print(intb) 所找的第二个位置点
    content = src[inta:intb]
    return content


def pageinurl(url):
    '''
    这个是把上面的许多功能放在一个函数库里,方便操作。
    作用是给定一个url,自动去解析地址,并自动下载保存图片。
    '''
    src = geturl(url)
    content = continsrc(src)
    parser = MyHTMLParser()
    parser.feed(content)
    parser.close()
    alinks = parser.links
    for i in range(len(alinks)):
        print("filename:",alinks[i][0],"fileurl:",alinks[i][1])
        urllib.request.urlretrieve(alinks[i][1],alinks[i][0]+".jpg")
    print("ok!!")


if __name__ == "__main__":
    print("------------------------")
    #url = "http://www.meizitu.com/a/4647.html"
    url = "http://www.meizitu.com/a/4674.html"
    src = geturl(url)
    
    content = continsrc(src)
    print(content)

    parser = MyHTMLParser()
    parser.feed(content)
    parser.close()

    print("------------------------------------------")
    print(parser.links)

    a = parser.links
    b = len(a)
    print(len(a))

    for i in range(b):
        print("filename:",a[i][0],"fileurl:",a[i][1])
        urllib.request.urlretrieve(a[i][1],a[i][0]+".jpg")


    print("==================================")
    pageinurl("http://www.meizitu.com/a/4647.html")