老规矩,python hello world, 抓妹子图
老规矩,python hello world, 抓妹子图
扣的man 发表于3年前
老规矩,python hello world, 抓妹子图
  • 发表于 3年前
  • 阅读 26
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

摘要: 老规矩,python hello world, 抓妹子图,把站上的两位师兄的代码copy修改了一下。基本上可以跑。3秒一张图。想着用多线程抓肯定会快几倍。图片我就留着不分享了!
#!/usr/bin/env python
#coding=utf-8
import urllib
import urllib.request
import urllib.parse
import re 
 
'''抓取www.meizitu.com的图片'''
#http://www.meizitu.com/a/list_1_1.html
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




#获取html内容
def getHtml(url):
    file = urllib.request.urlopen(url)
    html = file.read()
    return html.decode("gbk")

def getImageListPage(htmlurl):
    #reg = r'<a href="(.+?)"'
    reg = r"http://www.meizitu.com/a/(\d.+).html"
    imgrepage = re.compile(reg)
    imglistpage = re.findall(imgrepage,htmlurl)
    return imglistpage

#匹配图片地址返回列表数组
def getImg(html):
    #reg = r'data-original="(.+?\.jpg)"'
    imgre = re.compile(reg)
    imglist = re.findall(imgre,html)
    return imglist

#下载图片
def download(imgList,page):
    x = (page-1)*10
    for imgurl in imgList:
        print("download file "+str(x)+" start")
        urllib.request.urlretrieve(imgurl, "E:/python_code/meizitu/%s.jpg" %x)
        print("download file "+str(x)+" end")
        x+=1
 
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

# 获取图片数量,最好是10的倍数
def getPicNum(page,limit):
    pageNumber = page+limit
    while(page<=pageNumber):
        url = "http://www.meizitu.com/a/list_1_"+str(page)+".html"
        print("------------------------url:",url)
        html=''
        html = getHtml(url)
        #print(html)
        print('get %s html success' % page)
        imagelistpage=[]
        imagelistpage=getImageListPage(html)
        imagelistpage = list(set(imagelistpage))
        print(imagelistpage)
        for imagepageurl in imagelistpage:
            imagepageurl="http://www.meizitu.com/a/"+str(imagepageurl)+".html"
            print("download file :",imagepageurl)
            content=[]
            parser=[]
            imagelistpageHTML=getHtml(imagepageurl)
            content=continsrc(imagelistpageHTML)
            parser = MyHTMLParser()
            parser.feed(content)
            parser.close()
            alinks=[]
            alinks = parser.links
            for i in range(len(alinks)):
                try:
                  print("filename:",alinks[i][0],"fileurl:",alinks[i][1])
                  urllib.request.urlretrieve(alinks[i][1],"E:/python_code/meizitu/"+str(alinks[i][0])+".jpg")
                  print("ok!!")
                except:
                  continue
            
        print('imagelistpage:',imagelistpage)
        page=page+1
 
#从第一页开始获取20张图片,可以自行定义从多少页开始进行获取
getPicNum(page=2,limit=100)
input("press enter")


  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 1
码字总数 569
×
扣的man
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: