校花网爬取校花照片

校花网爬取校花照片"""今天我们开始尝试,第一次学习爬虫的第一个案例,去校花网上爬取一些校花的照片"""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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • UI自动化控制微信发送文件【解决了一个无人回答的难题,Pywin32设置文件到剪切板】「建议收藏」

    UI自动化控制微信发送文件【解决了一个无人回答的难题,Pywin32设置文件到剪切板】「建议收藏」大家好,我是小小明。前面我在《UI自动化控制PC版微信》该系列文中更新了控制微信发送图片的方法。链接:https://blog.csdn.net/as604049322/category_11396772.html根据部分群友实际工作的需要,本文将分享如何控制微信发送文件。按照前面的思路,我们发送文本和图片,都是采用复制粘贴操作剪切板的方式,而uiautomation框架本身也提供了复制文本或图片的方法。但是如果需要复制文件到剪切板,uiautomation并没有提供相应的api。翻遍了全网的资

    2022年7月11日
    22
  • kafka 认证和鉴权方式_kafka实际应用

    kafka 认证和鉴权方式_kafka实际应用前言kafka官网关于sasl_scram鉴权Kafka消费端配置创建SCRAMCredentials依赖zk,需要先启动zk,然后在zk中创建存储SCRAM凭证:cdkafkacluster/kafka_2.11-1.1.1bin/kafka-configs.sh–zookeeperzkIP1:2181,zkIP2:2181,zkIP3:2181/lxgkafka–alter–add-config’SCRAM-SHA-256=[password=admin-secr

    2025年7月4日
    2
  • Java中,为什么byte类型的取值范围为-128~127?

    Java中,为什么byte类型的取值范围为-128~127?在学习Java基础语法的时候,初学者的我们可能都会有这么一个疑问为什么byte类型的取值范围为什么是[-128,127]而不是[-127,127]。01111111表示最大的数值:127,因为第一位是符号位,所以11111111应该是最小的数值:-127,不是这样才对?在解释这个问题之前我们需要了解几个概念:机器数、真值、原码、反码、补码机器数:一个数在计算机中的二进制表示形式,叫做这个数的机器

    2022年6月15日
    25
  • java的class文件_java class是什么意思

    java的class文件_java class是什么意思根据 Java 虚拟机规范,类文件由单个 ClassFile 结构组成:ClassFile { u4 magic; //Class 文件的标志 u2 minor_version;//Class 的小版本号 u2 major_version;//Class 的大版本号 u2 constant_pool_count;//常量池的数量 cp_info consta

    2022年8月8日
    4
  • 嵌套是什么意思_循环结构能不能嵌套

    嵌套是什么意思_循环结构能不能嵌套思路:在嵌套使用repeater控件时,内部的repeater控件就要动态绑定数据源。就下面的代码示例来说,外部的repeater控件是rptTr,内部的repeater控件是rptTd。需要在rptTr的 onitemdatabound的处理函数中动态绑定数据源。前台:

    2022年10月9日
    2
  • SAP BAPI是个啥

    SAP BAPI是个啥BAPI是什么BAPI是啥对象是啥类是啥继承是啥接口是啥package是啥BAPI怎么用BAPI是啥SAPBAPI(业务应用程序编程接口),是针对业务对象模型的标准接口。BAPI是客户代码和第三方应用程序和SAP交互的主要方法。BAPI封装了SAP业务对象模型的内部层,以确保在访问或者更改业务对象时正确执行所有的业务逻辑,验证和授权检查。就是BusinessAPI.接口有个封装的概念,好了,是时候把一波概念写一遍了。要不然我都忘光了。讲接口之前,先看看对象是啥,我依稀记得是Java课上讲的,

    2022年7月24日
    8

发表回复

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

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