校花网爬取校花照片

校花网爬取校花照片"""今天我们开始尝试,第一次学习爬虫的第一个案例,去校花网上爬取一些校花的照片"""fromrequests_htmlimportH

大家好,又见面了,我是你们的朋友全栈君。

"""
今天我们开始尝试,第一次学习爬虫的第一个案例,去校花网上爬取一些校花的照片

"""
from requests_html import HTMLSession
##首先导入这个包

# 然后定义一个类,将这个功能封装起来,将我们所要实现的功能,都封装到这个类中
# 在以后的编程中,尽量将实现同一功能的函数,都封装到一个类中,这样比较方便


class Spider(object):
def __init__(self):
self.session = HTMLSession() ##先 生成一个这样的对象

def get_index_url(self):
##获取需要爬取的url路由
for i in range(1, 4):
##分页处理,由于第一个路由没有规律,所以第一个需要特殊处理.
##这里我们的校花网图片只有三页,以后爬取其他网站,我们也要找到
# 分页的url的规律,然后生成这样一个生成器,然后逐个返回
if i == 1:
yield 'http://www.xiaohuar.com/meinv/'
#这是一个生成器对象 ,每次返回一个元素 下次继续从这里执行
else:
yield 'http://www.xiaohuar.com/meinv/index_%s' % i

#当我们得到了要爬取图片的url之后,就要去找图片的具体的位置路径了.
def get_img_url(self, index_url):###将页面的url传进来
r = self.session.get(url=index_url)
###这个就是通过那个路由,模拟路由器向这个URL发送请求,得到那个返回的html
for element in r.html.find('.items'): ##现在就是利用那个css选择器从那个返回的结果中筛选
##这里使用的是类选择器,凡是有 class = 'items'的都会被筛选出来
img_element = element.find('img', first=True)##first=True 表示获取列表中的第一个元素
##然后继续在这个刚才筛选出来的结果中继续筛选,就标签选择器
title_element = element.find('.p_title a', first=True)
##这个是获取图片的名称的那个a标签
yield "http://www.xiaohuar.com" + img_element.attrs.get('src'), title_element.text
###将这两个标签对象返回出去,由于第一个路径不是绝对路径是一个相对路径,所以这里需要做一个拼接

def save_img(self, img_url, img_name): ###保存图片到本地,并且命名
img_name = img_name.replace('/', '').replace("\\", "") + ".jpg"
###因为我们之前获取的文件名中 可能会有 \ 或者 / 这种特殊符号,存成文件名会被识别成文件夹名称
##所以这里我们需要替换一下 双\\ 表示转义之后的 \
r = self.session.get(url=img_url) ##根据图片的资源地址 获取资源
with open(img_name, 'wb') as f:
f.write(r.content)
# r.content 就是那个图片的二进制数据流
print("%s下载完成" % img_name)

def run(self): ##执行函数
for index_url in self.get_index_url():
for img_url, img_name in self.get_img_url(index_url):
self.save_img(img_url, img_name)


if __name__ == '__main__':
xiaohua = Spider()
xiaohua.run()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155681.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月3日 下午2:16
下一篇 2022年7月3日 下午2:16


相关推荐

  • 【C++ spdlog】C++ 日志库 spdlog 使用

    【C++ spdlog】C++ 日志库 spdlog 使用1、在https://github.com/gabime/spdlog处下载源文件;2、下载后解压,将得到以下文件,其中include文件夹里是所需的头文件及源码;3、新建一个C++控制台应用程序项目spdlog-test,在项目属性页VC++目录-包含目录中添加上述include路径4、添加源文件源.cpp,输入以下代码#include<iostream>#…

    2022年6月23日
    26
  • epoch和batchsize设置多大(BatchDataset)

    梯度下降  这是一个在机器学习中用于寻找最佳结果(曲线的最小值)的迭代优化算法。  梯度的含义是斜率或者斜坡的倾斜度。  下降的含义是代价函数的下降。  算法是迭代的,意思是需要多次使用算法获取结果,以得到最优化结果。在数据很庞大的时候(在机器学习中,几乎任何时候都是),我们才需要使用epochs,batchsize,迭代这些术语,在这种情况下,一次性将数据输入计算机是不可能的…

    2022年4月15日
    553
  • Docker安装RabbitMQ教程「建议收藏」

    Docker安装RabbitMQ教程「建议收藏」本章教程介绍如何利用Docker快速搭建RabbitMQ环境。目录一、拉取镜像二、运行容器三、访问测试一、拉取镜像dockerpullrabbitmq:3.7.7-management二、运行容器dockerrun-d–namerabbitmq3.7.7-p5672:5672-p15672:15672-v`pwd`/data:/var/lib/rabbitmq–hostnamemyRabbit-eRABBITMQ_DEFAUL..

    2022年5月23日
    38
  • 禁爬虫robots.txt文件[通俗易懂]

    禁爬虫robots.txt文件[通俗易懂]禁止所有爬虫修改根目录robots.txt文件删除所有添加:User-agent:*Disallow:/检测地址:https://tools.aizhan.com/robots/www.lilysilk.org/

    2022年5月18日
    55
  • JAVA中输出语句中+的作用[通俗易懂]

    JAVA中输出语句中+的作用[通俗易懂]System.out.println()输出语句里面的+号,根据俩边的数据类型作不同处理,有俩种情况。①+后输出字符串,例如1+”a”输出的就是1a②+后输出数字,而不是字符串,例如1+‘a’,输出的就是98个人理解,觉得1+“a”,String类的优先级比较高,所以把1转换成了字符串,最后连接了起来,1+’a’是Int型的精度比较高,故将a转换成了int型再相加…

    2022年7月16日
    27
  • ODBC学习笔记—SQLAllocHandle

    ODBC学习笔记—SQLAllocHandleSQLAllocHandle函数定义:顾名思义,该函数就是用来分配句柄的,句柄类型参考参数详解。SQLRETURNSQLAllocHandle(     SQLSMALLINT     HandleType,     SQLHANDLE     InputHandle,     SQLHANDLE*     OutputHandlePtr);参数详解:Handl

    2022年7月14日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号