python爬虫之爬取“唯美“壁纸,让你心花怒放


个人名片:
🐅作者简介:一名大二在校生,热爱生活,爱好敲码!
\ 💅个人主页 🥇:holy-wangle
➡系列内容: 🖼️ tkinter前端窗口界面创建与优化
🖼️ Java实现ATP小系统
✨个性签名: 🍭不积跬步,无以至千里;不积小流,无以成江海

想要拥有大量的好看的壁纸和头像?跟我这一篇文章学习,如果一键爬取吧!!!!!

今天我补充上一篇文章无法爬取多页壁纸的内容,这是上一篇:python爬虫之爬取“唯美“主流图片

爬取url:https://pic.netbian.com/4kdongman/

到网页看看!!

我们选择一张图片查看照片的二进制文件在哪!

可以看见,这个当前源就是照片的真正存放位置,我们把它爬取下载即可!

先上代码!

# 导入需要用的模块
import requests
from lxml import etree
import os


# 创建一个:壁纸爬取类
class WallpaperCrawling(object):
    # 初始化
    def __init__(self):
        self.url = 'https://pic.netbian.com/4kdongman/'
        self.header = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/90.0.4430.85 Safari/537.36 Edg/90.0.818.49 '
        }
        # 用来拼接url
        self.number = 2

    # 爬取该url的网源代码并且转换为一般的形式然后返回这个值
    @staticmethod
    def crawling_page(url, header):
        response = requests.get(url, headers=header)
        page_text = response.text
        return page_text

    # 进行解析代码,提取图片,并且存储
    def solve_page(self, page, header):
        # 这是一种解析方式不懂的可以上网查找
        tree = etree.HTML(page)
        li_list = tree.xpath('//div[@class="slist"]/ul/li')
        # 判断是否有当前目录下有没有这个文件夹:picLipbs, 没有的话创建一个
        if not os.path.exists('./picLibs'):
            os.mkdir('./picLibs')
        for li in li_list:
            img_src = 'https://pic.netbian.com' + li.xpath('./a/img/@src')[0]
            img_name = li.xpath('./a/img/@alt')[0] + '.jpg'
            # 通用处理中文乱码解决方案
            img_name = img_name.encode('iso-8859-1').decode('gbk')
            img_name = img_name.replace('?', '').replace('*', '').replace('<', '').replace('> ', '')
            # print(img_name,img_src)
            # 请求图片,进行持久化存储
            img_data = requests.get(url=img_src, headers=header).content
            img_path = r"picLibs/" + img_name
            with open(img_path, 'wb') as fp:
                fp.write(img_data)
                print(img_name, '下载成功!!')
        # 这里是实现翻页的关键,我这里首先拼接好下一页的url,然后再次调用run_spider(),就是用迭代的思想去实现
        if self.number == 2:
            self.url += ("index_%d.html" % self.number)
            print(self.url)
            self.number += 1
            spider.run_spider()
        else:
            self.number += 1
            print(self.number)
            self.url = ('https://pic.netbian.com/4kdongman/index_%d.html' % self.number)
            spider.run_spider()

    def run_spider(self):
        # 获取page
        home_page = self.crawling_page(self.url, self.header)
        # 解析数据并且存储图片
        self.solve_page(home_page, self.header)


if __name__ == '__main__':
    spider = WallpaperCrawling()
    spider.run_spider()

我这里是写一个爬虫类实现爬取壁纸的!

# 初始化
    def __init__(self):
        self.url = 'https://pic.netbian.com/4kdongman/'
        self.header = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/90.0.4430.85 Safari/537.36 Edg/90.0.818.49 '
        }
        # 用来拼接url
        self.number = 2
  1. 首先先初始化,设置要爬取的URL的网址,然后设置一个请求头,模拟浏览器发送请求,self.number=2,这里是等会要拿来拼接我们的翻页url的,等会再具体将讲!

    def crawling_page(url, header):
        response = requests.get(url, headers=header)
        page_text = response.text
        return page_text
  1. 然后呢发送请求,获取网源代码!

# 进行解析代码,提取图片,并且存储
    def solve_page(self, page, header):
        # 这是一种解析方式不懂的可以上网查找
        tree = etree.HTML(page)
        li_list = tree.xpath('//div[@class="slist"]/ul/li')
        # 判断是否有当前目录下有没有这个文件夹:picLipbs, 没有的话创建一个
        if not os.path.exists('./picLibs'):
            os.mkdir('./picLibs')
        for li in li_list:
            img_src = 'https://pic.netbian.com' + li.xpath('./a/img/@src')[0]
            img_name = li.xpath('./a/img/@alt')[0] + '.jpg'
            # 通用处理中文乱码解决方案
            img_name = img_name.encode('iso-8859-1').decode('gbk')
            img_name = img_name.replace('?', '').replace('*', '').replace('<', '').replace('> ', '')
            # print(img_name,img_src)
            # 请求图片,进行持久化存储
            img_data = requests.get(url=img_src, headers=header).content
            img_path = r"picLibs/" + img_name
            with open(img_path, 'wb') as fp:
                fp.write(img_data)
                print(img_name, '下载成功!!')
  1. 这里进行解析、爬取、存储!

我这里是用xpath进行解析。解析就是什么?就是找到照片存储的位置呢,上面说的当前源的地址哦!

这个黑框可以帮助我们更好的找到存放位置!如果没找对位置,右边是不会出现文字的!

不懂可以去,百度一下,这里就不讲了!

img_name = img_name.replace('?', '').replace('*', '').replace('<', '').replace('> ', '')这里防止图片名字出现这些window命名不允许出现的符号!

 # 这里是实现翻页的关键,我这里首先拼接好下一页的url,然后再次调用run_spider(),就是用迭代的思想去实现
        if self.number == 2:
            self.url += ("index_%d.html" % self.number)
            print(self.url)
            self.number += 1
            spider.run_spider()
        else:
            self.number += 1
            print(self.number)
            self.url = ('https://pic.netbian.com/4kdongman/index_%d.html' % self.number)
            spider.run_spider()

d.实现翻页!

这里可以看见这是首页的url:https://pic.netbian.com/4kdongman/index.html

然后这是第二页的url:https://pic.netbian.com/4kdongman/index_2.html

然后第三页的url是:https://pic.netbian.com/4kdongman/index_3.html

依次类推而已!

发现这个好办事了!!!!!

我们第一页爬取完成后,判断self.number是不是等于2.如果是的话就可以就爬取当前页,然后+1后面就迭代爬取每一页了!

if self.number == 2:
            self.url += ("index_%d.html" % self.number)
            print(self.url)
            self.number += 1
            spider.run_spider()
else:
    self.number += 1
    print(self.number)
    self.url = ('https://pic.netbian.com/4kdongman/index_%d.html' % self.number)
    spider.run_spider()

我们看看爬取的效果是怎么样的!!!!

这是正文!!

这里会一直爬取到没有的爬!


感谢各位的观看,创作不易,能不能给哥们来一个点赞呢!!!

好了,今天的分享就这么多了,有什么不清楚或者我写错的地方,请多多指教!

私信,评论我呗!!!!!!

关注我下一篇不迷路哦!


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值