Python爬虫入门教程10:彼岸壁纸爬取

前言💨

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

前文内容💨

Python爬虫入门教程01:豆瓣Top电影爬取

Python爬虫入门教程02:小说爬取

Python爬虫入门教程03:二手房数据爬取

Python爬虫入门教程04:招聘信息爬取

Python爬虫入门教程05:B站视频弹幕的爬取

Python爬虫入门教程06:爬取数据后的词云图制作

Python爬虫入门教程07:腾讯视频弹幕爬取

Python爬虫入门教程08:爬取csdn文章保存成PDF

Python爬虫入门教程09:多线程爬取表情包图片

PS:如有需要 Python学习资料 以及 解答 的小伙伴可以加点击下方链接自行获取
python免费学习资料以及群交流解答点击即可加入

基本开发环境💨

  • Python 3.6
  • Pycharm
  • wkhtmltopdf

相关模块的使用💨

  • re
  • requests
  • concurrent.futures

安装Python并添加到环境变量,pip安装需要的相关模块即可。

一、💥明确需求

彼岸的壁纸,在我觉得是真的好看。虽然可以免费下载,但是对于有条件的小伙伴,还是可以支持一下付费的,毕竟不贵,只需要30元就可以全站无限制下载了。
在这里插入图片描述

二、💥网页数据分析

一步一步点击图片进去可以发现详情页的url地址是有由 图片ID 以及 图片分辨率 组成。
在这里插入图片描述
再次点击,之后可以看到图片的真实地址。如果你只是想要找一张壁纸图片的话,这样保存图片之后就高清的壁纸了。
在这里插入图片描述
如果是要爬取图片的话,在详情页的中是有图片链接的。
在这里插入图片描述
所以只需要在列表页中,获取图片的 ID 就可以了,因为我们爬取的本身就是 1920*1080的分辨率,所以这个分辨率的是固定的。只要获取 图片ID然后拼接url就可以了。
在这里插入图片描述

这里需要注意一个问题:

每页的数据当中,是有两个我们不需要的内容。
在这里插入图片描述
在这里插入图片描述
我们所需要的数据是附带 标题的,不需要的则是没有标题,所以可以根据这个进行一个判断。

三、💥代码实现

获取网页数据💦

def get_response(html_url):
    """获取网页数据"""
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
    }
    response = requests.get(url=html_url, headers=headers)
    return response

获取每张壁纸的ID💦

def main(html_url):
    """获取图片ID"""
    response = get_response(html_url)
    selector = parsel.Selector(response.text)
    image_info = selector.css('.list ul li')
    for link in image_info:
        image_title = link.css('a::attr(title)').get()
        # 进行简单的判断,如果有标题就获取ID 
        if image_title:
            id_info = link.css('a::attr(href)').get()
            # /desk/23177.htm
            image_id = id_info.replace('.htm', '').split('/')[-1]

获取每张壁纸的url地址💦

def get_image_url(image_id):
    """获取图片的真实url地址"""
    page_url = f'http://www.netbian.com/desk/{image_id}-1920x1080.htm'
    response = get_response(page_url)
    selector = parsel.Selector(response.text)
    image_url = selector.css('#endimg a::attr(href)').get()
    return image_url

保存壁纸💦

def save(image_url, title):
    filename = 'images\\' + title + '.jpg'
    image_content = get_response(image_url).content
    with open(filename, mode='wb') as f:
        f.write(image_content)
        print('正在保存:', title)
当我写完代码,运行的时候发现了一个问题

在这里插入图片描述
在这里插入图片描述
图片是能保存下来,但是它乱码了,所以需要在获取网页数据的函数里面加一行代码

# 万能的转码方式
response.encoding = response.apparent_encoding
更新代码之后,标题变成了中文了,但是又出现新的问题了

在这里插入图片描述
在这里插入图片描述
每个标题后面都是带有 更新时间的,返回网页看一下源代码。
在这里插入图片描述
a 标签里面的 title 属性里面是带有更新时间,img标签里面的alt属性是没有更新时间的,所以我们要重新提取一下标题数据。

更改后:
def main(html_url):
    """获取图片ID"""
    response = get_response(html_url)
    selector = parsel.Selector(response.text)
    image_info = selector.css('.list ul li')
    for link in image_info:
        image_title = link.css('a::attr(title)').get()
        if image_title:
            title = link.css('a img::attr(alt)').get()
            id_info = link.css('a::attr(href)').get()
            # /desk/23177.htm
            image_id = id_info.replace('.htm', '').split('/')[-1]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这些壁纸还挺大的,翻页根据页码进行翻页就好了,关于多线程爬取的话,可以参考上篇的文章内容。

posted @ 2021-01-28 16:08  有趣的Python  阅读(458)  评论(0编辑  收藏  举报