python面向对象爬取肖战图片

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

主要步骤:

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

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

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

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

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

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

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

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

python面向对象爬取肖战图片
我们接着翻到第二页
python面向对象爬取肖战图片
我在翻一页看看会怎么样
python面向对象爬取肖战图片
我们发现了规律,每翻一页s-p{}就会增加1,我们就可以通过这个规律来获取更多的网址。我们就定义获取网址的一个函数。

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

定义一个列表来保存网址,通过for循环增加网址。基础网址我们已经初始化了,这里可以直接用。
3.发送请求,获取响应
那么现在我们有了网址,下一波就模拟网页想服务器发送请求,获取响应。
点击鼠标右键,点击检查(小编用的谷歌浏览器,其他浏览器也可以右键)
python面向对象爬取肖战图片
进来会发现这个页面,如果没有,就ctrl+r 刷新下
python面向对象爬取肖战图片
我大体介绍下这个网页的构成,这里是网页的源代码,又一个个标签组成的(小编也是初学者,目前还没有学习前端的知识,这是个人的理解)
点击network,会发现有许多选项,就随便点击一个
python面向对象爬取肖战图片
python面向对象爬取肖战图片
我们现在重点关注右边,往下找,会找到user_agent,这是就浏览器的信息,服务器也是通过这个信息来判断是浏览器来发送的请求,还是其他,这个非常关键。那么现有了网址,也有了user-agent,就可以模拟浏览器了。
python面向对象爬取肖战图片
在初始化函数里添加我们刚刚找到的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"
}

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

    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

python面向对象爬取肖战图片
点击这个按钮,再去点击图片,可以快速找到该图片的源代码
python面向对象爬取肖战图片
我们发现图片的网址构成组成方式相同,都是<img data-rootid…构成,我们就把这个标签复制下来,就通过正则表达筛选。
4.清洗数据,获取图片网址
我们就创建一个新函数来清洗数据。

     def clear(self, respons):
for i in respons:
qqq = r'<img data-rootid=".*?" alt="肖战" data-iid="" src="(.*?)" height=".*?"/>'
pi = re.findall(qqq, i)
return pi # 返回图片的网址

正则表达式不清楚的可以去看小编之前的文章,讲解了如何使用正则表达式(小编这里筛选数据运用的正则表达式也不是特别好,欢迎各位批评建议)。
运行代码就可以得到图片的网址。
python面向对象爬取肖战图片
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)

循环通过网址下载图片,并保存在文件夹里。
当然,别忘了主函数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'<img data-rootid=".*?" alt="肖战" data-iid="" src="(.*?)" height=".*?"/>'
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()

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

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

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

python面向对象爬取肖战图片

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » python面向对象爬取肖战图片
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏