文档章节

老规矩,python hello world, 抓妹子图

扣的man
 扣的man
发布于 2015/06/05 15:32
字数 569
阅读 26
收藏 0
#!/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")


© 著作权归作者所有

共有 人打赏支持
扣的man
粉丝 0
博文 1
码字总数 569
作品 0
深圳
python爬头条妹子,为了不被查水表,就不好 多介绍了

先来几张漂亮小姐姐照片 首先需要安装的Python库: requests urllib 直接pip安装就好了 接着我们在网页上打开今日头条,在搜索栏搜索“街拍”(视频教程) 因为这里面的小姐姐多,漂亮 之后,...

Python新世界
07/27
0
0
利用Boost::Python实现C++调用python接口

Boost.Python能将C++的结构体暴露给Python使用。但是在运用Boost.Python时,却遇到一个难题, 1、在C++定义一个新的结构体struct A 2、将此结构体暴露给Python解释器 3、如今在工程中生成结构...

Start-up
2012/11/09
0
0
[雪峰磁针石博客]flask构建自动化测试平台1-hello

简介 第一部分 Flask实例。学习使用Flask开发,构建功能完备的Web应用程序。我们开发了动态的头条新闻应用程序,可显示最新的新闻标题以及最新的货币和天气信息。在项目二中,我们构建了由M...

Python测试开发人工智能
06/09
0
0
Python基础教程系列:一、Python起步

毕竟不是写论文,也不是照本宣科,尽管写的内容主要还是来自于书本或者网络,但也尽量以自己理解的方式写出来吧,呵呵! 首先软件的安装我就不说了,建议尽量在Linux系统下玩,而且一般Linux...

东方神剑
2015/01/20
0
2
Python小白学习笔记(成长之路)

Python语言可能是第一种即简单又功能强大的编程语言。它不仅适合于初学者,也适合于专业人员使用,更加重要的是,用Python编程是一种愉快的事。本身将帮助你学习这个奇妙的语言,并且向你展示...

乐先生
2013/12/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

c语言之内存分配笔记

先看一个数组: short array[5] = {1,2} // 这儿定义的一个int类型的数组,数组第1和第2个元素值是1和2.其余后面默认会给值为0; 或者 short array[] = {1,2};//这儿数组第1和第2个元素,数组...

DannyCoder
42分钟前
0
0
Shell | linux安装包不用选择Y/N的方法

apt-get install -y packageOR echo "y" | sudo apt-get install package

云迹
今天
1
0
Hadoop的大数据生态圈

基于Hadoop的大数据的产品圈 大数据产品的一句话概括 Apache Hadoop: 是Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的软件架...

zimingforever
今天
4
0
八大包装类型的equals方法

先看其中一个源码 结论:八大包装类型的equals方法都是先判断类型是否相同,不相同则是false,相同则判断值是否相等 注意:包装类型不能直接用==来等值比较,否则编译报错,但是数值的基本类型...

xuklc
今天
2
0
NoSQL , Memcached介绍

什么是NoSQL 非关系型数据库就是NoSQL,关系型数据库代表MySQL 对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很耗...

TaoXu
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部