• 初识python 之 爬虫:爬取某网站的壁纸图片


    用到的主要知识点:
    requests.get 获取网页HTML
    etree.HTML 使用lxml解析器解析网页
    xpath 使用xpath获取网页标签信息、图片地址
    request.urlretrieve 下载图片(:该网站使用urlretrieve下载图片时,返回403错误。原因目前未知!)

    改用 with as 下载图片:
    with open('文件地址及名字', 'wb') as f:
    f.write(res.content)

    详细代码如下:

    #!/user/bin env python
    # author:Simple-Sir
    # time:2019/7/17 10:14
    # 爬取某网站的壁纸图片
    import requests
    from lxml import etree
    from urllib import request
    import urllib
    import time
    
    # 伪装浏览器
    headers ={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
    }
    # 获取壁纸首页网页信息并解析
    def getUrlText(url):
        respons = requests.get(url,headers=headers)  # 获取网页信息
        urlText = respons.text
        html = etree.HTML(urlText)  # 使用lxml解析网页
        return html
    
    # 提取壁纸链接地址列表
    def getWallUrl(url):
        hrefUrl = getUrlText(url)
        section = hrefUrl.xpath('//section[@class="thumb-listing-page"]')[0]  # 获取section标签
        hrefList = section.xpath('./ul//@href')  # 获取首页图片对应链接地址
        return hrefList
    
    # 获取当前时间
    def getTime():
        nowtime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
        return nowtime
    
    # 解析壁纸下载地址
    def downWall(url,page):
        '''
        :param url: 网页地址
        :param page: 下载页数
        :return: 下载结束提醒
        '''
        m = 0
        page += 1
        for i in range(1,page):
            hrefList = getWallUrl(url+str(i))
            n = 0
            print('33[36;1m*********** 开始下载第{}页壁纸 ************33[0m'.format(i))
            for href in hrefList:
                n += 1
                imgUrl = getUrlText(href) # 获取壁纸链接网页信息并解析
                imgSrc = imgUrl.xpath('//img[@id="wallpaper"]/@src')[0]
                # strUl = etree.tostring(imgSrc, encoding='utf-8').decode('utf-8')  # 对获取到ul解码
                # print(strUl)
                imgType = imgSrc[-4:]  # 壁纸格式
                print('{}:33[31;1m开始下载第{}页第{}张壁纸33[0m'.format(getTime(),i,n))
                # request.urlretrieve(imgSrc, './wall/' + str(n) + imgType) #403错误
                res = requests.get(imgSrc)
                with open('./wall/'+str(i)+'_'+str(n)+imgType, 'wb') as f:
                    f.write(res.content)
                print('{}:33[31;1m第{}页第{}张壁纸下载完成33[0m'.format(getTime(),i,n))
            m = m + n
        return print('{}:33[36;1m所有壁纸已下载完成,一共{}页{}张。33[0m'.format(getTime(),i,m))
    
    # url = 'https://wallhaven.cc/search?q=id%3A711&ref=fp&tdsourcetag=s_pcqq_aiomsg&page='
    
    if __name__ == '__main__':
        page =int(input('33[36;1m请输入你想下载的页数:33[0m'))
        print('33[36;1m程序执行中,请稍等。。。即将下载。33[0m')
        downWall('https://wall***&page=',page)

    运行结果:

    世风之狡诈多端,到底忠厚人颠扑不破; 末俗以繁华相尚,终觉冷淡处趣味弥长。
  • 相关阅读:
    netty(八) netty中自带channelhandler
    netty(七) Handler的执行顺序
    netty(六) websocket开发应用
    netty(五) http协议开发应用
    netty(四) 编解码技术
    netty(三) TIP黏包/拆包问题解决之道
    netty(二) 创建一个netty服务端和客户端
    netty(一) netty有哪几部分构成
    使用jsp制作index,可以通过<c:if test==“管理员”>或<c:if test=="客户">来区别展示用户界面
    使用jstl和el表达式来展示request域中存放的user对象的信息
  • 原文地址:https://www.cnblogs.com/simple-li/p/11202461.html
Copyright © 2020-2023  润新知