前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >优美库图片小程序 Version1.0

优美库图片小程序 Version1.0

作者头像
xbhog
发布2019-09-08 22:08:01
5690
发布2019-09-08 22:08:01
举报
文章被收录于专栏:开发技能乱炖

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_43908900/article/details/99697645

优美库图片小程序 version1.0

今天制作一个优美库图片小程序,网址http://www.umei.cc/bizhitupian/

爬虫的相关流程:获取目标网址-获取数据-存储数据。下面使该网页的内容:

图片一:

在这里插入图片描述
在这里插入图片描述

第一步:找到该网站下的便签,找到该标签网页下所有的url,这里的思路是获取该标签下的页数,通过循环拼接所有的url。

对标签下的网页1(<http://www.umei.cc/bizhitupian/diannaobizhi/1.htm>)与网页2(<http://www.umei.cc/bizhitupian/diannaobizhi/2.htm>)进行比较,相信你会发现规律的。如图片2,2.1:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码段:

代码语言:javascript
复制
import  requests
from lxml import  etree
import  re
from urllib.request import urlretrieve
import  random
dict = {}
img_url = []
img = []

headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
def Total_label():
    '''获取标签并进行分类存放在字典中'''
    response = requests.get('http://www.umei.cc/bizhitupian/').content
    html = etree.HTML(response)

    title = html.xpath("//div[@class='w850 l oh']//a/@title")
    url = html.xpath("//div[@class='w850 l oh']//a/@href")
    # 循环镶嵌将标题与url结合
    index = 0
    for i in title:
        dict[i] = url[index]
        index += 1
# for k, v in dict.items():
#     print(k , v)
# 抓取链接
def Grab(num):
    '''获取每个标签下的总页数'''
    url = dict[num]
    # print(url)
    response = requests.get(url,headers=headers,timeout=3)
    # response.encoding = 'utf-8'
    text = response.content.decode('utf-8')
    html = etree.HTML(text)
    pages = html.xpath("//div[@class='NewPages']//ul/li//@href")[-1].split('.')[0]
    return (int(pages),url)

# 获取总页中所有分页的url
def get_paging(url,pages_n):
    urls = [url+'{}.htm'.format(i) for i in range(1,pages_n+1)]
    '''获取每个url下的图片链接'''
    for i in urls:
        response_time = requests.get(i, headers=headers, timeout=3)
        # response.encoding = 'utf-8'
        text = response_time.content.decode('utf-8')
        html = etree.HTML(text)
        jpg_url = html.xpath("//div[@class='TypeList']//a/@href")
        for i in jpg_url:
            img_url.append(i)

第二步:我们已经有了分页的url,我们再获取图片的url,进行下载即可:

代码语言:javascript
复制
def img_To_obtain():
    '''图片获取'''
    # 图片链接 Xpath语法://*[@id="ArticleId60"]/p/a/img/@src
    # print(img_url)
    for x in img_url:
        response = requests.get(x,headers=headers,timeout=3)
        text = response.content.decode('utf-8')
        html = etree.HTML(text)
        '''整站爬,分页,可以通过url进行判断
        if 页数2 == 网页状态404:
            只是一张图片
        该系列有分页
        '''
        page_f = html.xpath('//*[@id="ArticleId60"]/p/a/img/@src')
        for j in page_f:
            img.append(j)

def extract():
    '''随机获取一张图片'''
    IMAGE_URL = random.choice(img)
    The_suffix = IMAGE_URL.split('.')[3]
    urlretrieve(IMAGE_URL, './image/img1.{}'.format(The_suffix))

主程序部分:

代码语言:javascript
复制
if __name__ == '__main__':
    print('================欢迎来到图片选择器v1.0=====================')
    print('''=====================提示信息=============================
                    1:电脑壁纸
                    2:手机壁纸
                    3.动态壁纸
                                。。。。
                    9:可爱壁纸
    ''')
    Total_label()
    num = str(input("请输入您的选择:"))
    '''页数+标题url'''
    page_n,url = Grab(num)
    print('%s页数为:%s, url:%s'%(num,page_n,url))
    get_paging(url,page_n)
    extract()

结尾:

该程序比较低级,可以说很垃圾,小编自己都感觉很垃圾,有很多没有完善的地方,使用的面向过程的,没有多线程,没有异常处理,代码啰嗦等。

胜在学习思路吧,该网站是没有反爬的,基本网站,但是不要过度的请求,给对方服务器留条活路,后期会把完善的代码重做一期跟大家一起学习。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年08月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 优美库图片小程序 version1.0
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档