优美库图片小程序 Version1.0

优美库图片小程序 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:
在这里插入图片描述在这里插入图片描述
代码段:

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,进行下载即可:

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))

主程序部分:

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()

结尾:

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值