初识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('\033[36;1m*********** 开始下载第{}页壁纸 ************\033[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('{}:\033[31;1m开始下载第{}页第{}张壁纸\033[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('{}:\033[31;1m第{}页第{}张壁纸下载完成\033[0m'.format(getTime(),i,n))
        m = m + n
    return print('{}:\033[36;1m所有壁纸已下载完成,一共{}页{}张。\033[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('\033[36;1m请输入你想下载的页数:\033[0m'))
    print('\033[36;1m程序执行中,请稍等。。。即将下载。\033[0m')
    downWall('https://wall***&page=',page)

 

运行结果:

 

 

posted on 2019-07-17 17:31  Simple-Sir  阅读(580)  评论(0编辑  收藏  举报

导航