图片list_python面向对象爬取肖战,王一博图片

python面向对象爬取肖战,王一博图片

75e13f0f56adeb3afd04e12df951e766.png

今天小编向大家介绍的是用python在堆糖上爬取肖战的图片。

主要步骤:

1.获取网址
2.运用requests包模拟网站,向服务器发送请求,获取响应
3.清洗数据,通过正则表达式筛选自己需要的数据
4.保存数据

关键字:requests,正则表达式,面向对象

本文通过面向对象的方法介绍爬虫,下一期小编再介绍面向过程如何爬取。
现在就正式给大家讲解爬虫步骤。

import re  # 正则表达式import requests  # 爬虫用的包from urllib.request import urlretrieve  # 本文用来下载图片import os # 标准库,本文用来新建文件夹1234

1.构建大体框架
构建好面向对象的大体框架,分好步骤,这样写代码思路才够清晰。

class Xiaozhan(object):    def __init__(self):        pass    def run(self):    passif __name__ == "__main__":xiaozhan = Xiaozhan()xiaozhan.run()12345678

构建好这样的框架才能饶着整个程序跑起来,run函数则是我们的主函数,那么我们在主函数里先注释好我们需要做的步骤,主要步骤则是开始写的四条。2.获取网址

    def __init__(self):        self.base_url = "https://www.duitang.com/search/?kw=肖战&type=feed#!s-p{}"12
e795bc08a0aebc7bc2e30149f6177aea.png


我们接着翻到第二页

8575babc4d071a5e8edff692d3bcfadb.png


我再翻一页看看会怎么样

2595b0774f1e0439885ff211c1c23723.png


我们发现了规律,每翻一页s-p{}就会增加1,我们就可以通过这个规律来获取更多的网址。我们就定义获取网址的一个函数。

    def Geturl(self):        all_url = []        for item in range(3):            all_url.append(self.base_url.format(item))        return all_url12345

定义一个列表来保存网址,通过for循环增加网址。基础网址我们已经初始化了,这里可以直接用。3.发送请求,获取响应
那么现在我们有了网址,下一波就模拟网页向服务器发送请求,获取响应。
点击鼠标右键,点击检查(小编用的谷歌浏览器,其他浏览器也可以右键)

0552199ee4e429b46434902c3ab0ffa4.png


进来会发现这个页面,如果没有,就ctrl+r 刷新下

7f2afcf1cc584fdbe62d3c5cf4f4469f.png


我大体介绍下这个网页的构成,这里是网页的源代码,由一个个标签组成的(小编也是初学者,目前还没有学习前端的知识,这是个人的理解)
点击network,会发现有许多选项,就随便点击一个

bcb20062a8bfc7df387b9d1711e277f9.png
18e1284e0881e367a0c2152ad5f35450.png


我们现在重点关注右边,往下找,会找到user_agent,这是就浏览器的信息,服务器也是通过这个信息来判断是浏览器来发送的请求,还是其他,这个非常关键。那么现有了网址,也有了user-agent,就可以模拟浏览器了。

d6709da709d3c7262e3d121e4312cfec.png


在初始化函数里添加我们刚刚找到的user-agent,注意要用字典的形式。

    def __init__(self):        self.base_url = "https://www.duitang.com/search/?kw=肖战&type=feed#!s-p{}"        self.header = {"user-agent":                           "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Mobile Safari/537.36"                       }12345

定义函数来获取网页的源代码,运行函数

    def Respons(self, all_url):        text_list=[]        for url in all_url:            r = requests.get(url, headers=self.header)            text_list.append(r.text)        return text_list123456
54324460e8e90f64973e5fe2f864d3c8.png


点击这个按钮,再去点击图片,可以快速找到该图片的源代码

e22135fbf723a49dcdb9dcfbab2a2c2a.png


我们发现图片的网址构成组成方式相同,都是4.清洗数据,获取图片网址
我们就创建一个新函数来清洗数据。

     def clear(self, respons):        for i in respons:            qqq = r''            pi = re.findall(qqq, i)            return pi  # 返回图片的网址12345

正则表达式不清楚的可以去看小编之前的文章,讲解了如何使用正则表达式(小编这里筛选数据运用的正则表达式也不是特别好,欢迎各位批评建议)。
运行代码就可以得到图片的网址。

1d395122f246c909a0c05c21e7b10a62.png

5.保存数据

        def save(self, url_list):        i = 0        # print(url_list)        if not os.path.exists("肖战图片"):            os.mkdir("肖战图片")  # 判断有没有该文件夹,如果没有就创建改文件夹        for url in url_list:            i = i + 1            print(url)            file_path = "./肖战图片" + "/" + str(i) + ".jpg"            urlretrieve(url, file_path)  # 下载图片,具体的用法可以去搜索下,很简单的            print("第%d张图片下载成功" % i)1234567891011

循环通过网址下载图片,并保存在文件夹里。
当然,别忘了主函数run函数的完善,小编没有具体讲,主要就是调用乡音的函数就好了。完整代码展示
最后展示下完整的代码。

import re  # 正则表达式import requests  # 爬虫用的包from urllib.request import urlretrieve  # 本文用来下载图片import os  # 标准库,本文用来新建文件夹class Xiaozhan(object):    def __init__(self):        self.base_url = "https://www.duitang.com/search/?kw=肖战&type=feed#!s-p{}"        self.header = {"user-agent":                           "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Mobile Safari/537.36"                       }    def Geturl(self):        all_url = []        for item in range(3):            all_url.append(self.base_url.format(item))        print(len(all_url))        return all_url  # 返回全部网址    def Respons(self, all_url):        text_list = []        for url in all_url:            r = requests.get(url, headers=self.header)            text_list.append(r.text)        return text_list  # 返回网址的源代码    def clear(self, respons):        for i in respons:            qqq = r''            pi = re.findall(qqq, i)            return pi  # 返回图片的网址    def save(self, url_list):        i = 0        # print(url_list)        if not os.path.exists("肖战图片"):            os.mkdir("肖战图片")  # 判断有没有该文件夹,如果没有就创建改文件夹        for url in url_list:            i = i + 1            print(url)            file_path = "./肖战图片" + "/" + str(i) + ".jpg"  # 文件路径            urlretrieve(url, file_path)  # 下载图片,具体的用法可以去搜索下,很简单的            print("第%d张图片下载成功" % i)    def run(self):        # 1.获取网址的列表        titile_url = self.Geturl()        # print(titile_url)        # 2.发送请求,获取响应        respons = self.Respons(titile_url)        # print(respons)        # 3.通过正则表达式清洗数据        picture = self.clear(respons)        print(picture)        # 4.保存数据        download = self.save(picture)        # print(download)if __name__ == "__main__":    xiaozhan = Xiaozhan()    xiaozhan.run()12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364

运行整个程序,就可以看到当前路径多了一个肖战图片的文件夹,点开就可以看见帅气的肖战了,嘻嘻!

希望大家坚持学习,不忘初心,离自己目标越来越近!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值