Python爬虫获取美女头像并保存本地(观山篇一)

news2024/11/25 8:15:04

Python爬虫获取美女头像并保存本地(观山篇一)

  • 前言
  • 步骤一
  • 步骤二
  • 步骤三
  • 步骤四
  • 步骤五
  • 最终效果
  • 完整代码
  • 结言

前言

    最近某短视频平台上经常刷到,人生四大雅事:“品茗、抚琴、观山、听雨”。那么今天我们就利用python观山所看到的美景给记录起来,方便我们以后快捷的回忆观山美景。
    好了,其他的不多说了,接下来我们所准备好所需环境:python3、requests、lxml。

步骤一

  1. 首先我们打开目标网页,然后F12打开浏览器控制台,分析网页元素。在这里插入图片描述

步骤二

  1. 仔细观察上面框框圈中的部分,一个ul列表包裹的a标签就是当前展示封面的详情页。此时我们要进入到详情页,并获取详情页内的图片:代码如下:
# 模拟浏览器发送请求
response = requests.get(url, headers=spider_header)
# 防止返回的HTML字符串乱码,设置一下编码
response.encoding = "utf-8"
# 将返回的HTML字符串用etree解析成HTML,方便下面用xpath语法进行操作
html = etree.HTML(response.text)
# 获取页面图片展示列表
lis = html.xpath("/html/body/section/div/div/div[2]/div[2]/div/ul/li/a")
# 定义一个临时集合,用于保存首页展示的列表链接
lis_hrefs = []
for li in lis:
    lis_hrefs.append(f'{base_url}{li.xpath("@href")[0]}')

步骤三

  1. 打开某个封面的详情页,并分析构成,如图所示:
    在这里插入图片描述

步骤四

  1. 经过步骤三的元素分析,直接获取img里的src属性就行了,利用xpath语法提取,当我们分析完毕后,接下来就是遍历步骤二获取的封面集合,然后进入详情提取imgsrc属性,也就是下载地址了。代码如下:
# 循环便利访问临时集合内的链接
for href in lis_hrefs:
    res = requests.get(href, headers=spider_header)
    res.encoding = "utf-8"
    res_html = etree.HTML(res.text)
    # 获取所有图片集合
    images = res_html.xpath("/html/body/section/div/div/article/p/a/img/@src")
    header = res_html.xpath("/html/body/section/div/div/header/h1/text()")[0]

步骤五

  1. 将步骤四获取的src进行下载,代码如下:
	root_path = os.getcwd()
    os.mkdir(header)
    file_path = f"{root_path}/{header}"
    for image in images:
        # 获取并设置保存图片的名称
        file_name = re.findall("\d+.jpg", image)[0]
        # 获取的图片链接,有重定向操作
        response = requests.get(image, headers=down_header, allow_redirects=True)
        with open(f"{file_path}/{file_name}", "wb") as f:
            f.write(response.content)
        time.sleep(0.5)
    time.sleep(1)
    print(f"首页:{header}的第一页图片保存完毕!")

注意获取的图片链接,有重定向操作上述步骤五代码有注释说明。

最终效果

在这里插入图片描述

完整代码

import requests
from lxml import etree
import re
import time
import os

url = "https://www.keaitupian.cn/meinv/"

base_url = "https://www.keaitupian.cn"

spider_header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36",
    "Referer": "https://www.keaitupian.cn",
    "Host": "www.keaitupian.cn"
}
down_header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36",
}
# 模拟浏览器发送请求
response = requests.get(url, headers=spider_header)
# 防止返回的HTML字符串乱码,设置一下编码
response.encoding = "utf-8"
# 将返回的HTML字符串用etree解析成HTML,方便下面用xpath语法进行操作
html = etree.HTML(response.text)
# 获取页面图片展示列表
lis = html.xpath("/html/body/section/div/div/div[2]/div[2]/div/ul/li/a")
# 定义一个临时集合,用于保存首页展示的列表链接
lis_hrefs = []
for li in lis:
    lis_hrefs.append(f'{base_url}{li.xpath("@href")[0]}')
# 循环便利访问临时集合内的链接
for href in lis_hrefs:
    res = requests.get(href, headers=spider_header)
    res.encoding = "utf-8"
    res_html = etree.HTML(res.text)
    # 获取所有图片集合
    images = res_html.xpath("/html/body/section/div/div/article/p/a/img/@src")
    header = res_html.xpath("/html/body/section/div/div/header/h1/text()")[0]
    root_path = os.getcwd()
    os.mkdir(header)
    file_path = f"{root_path}/{header}"
    for image in images:
        # 获取并设置保存图片的名称
        file_name = re.findall("\d+.jpg", image)[0]
        # 获取的图片链接,有重定向操作
        response = requests.get(image, headers=down_header, allow_redirects=True)
        with open(f"{file_path}/{file_name}", "wb") as f:
            f.write(response.content)
        time.sleep(0.5)
    time.sleep(1)
    print(f"首页:{header}的第一页图片保存完毕!")

结言

     上述代码只对第一页进行了保存,并没有进行分页保存,如需分页保存可自行学习或者私信联系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/876482.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何做好一名网络工程师?具备的技能有哪些?

支持属于网络工程师的工作范围的企业网络,此网络与支持它的铜或光纤基础架构一样性能良好。网络工程师及其布线厂区需要为支持最新网络技术做好准备。网络工程师作为任何性能问题的解决者,需要拥有必要的工具来确定问题所在 — 在网络中还是在其他地方。…

在众多单片机市场中STM32系列为何能脱颖而出?

回顾单片机市场,除了传统的51系列外,早些年主要有PIC、TI、Nxp、ATMEL、Freescale等厂商。然而,这些厂商普遍存在一些问题:资料难以获取,文档数量有限且大多是英文的,开发板价格昂贵,调试器成本…

Mac 新手10个小窍门

即便你是 Mac 新手,也会发现它易学好用。你可以点按程序坞上的访达,快速查看到所有文件;把你喜爱的文件夹拖入边栏;你可以自定义查看文件的方式,甚至可以按下空格键,就能一键预览文档;还能在多台…

Linux 复制进程fork

一、父进程和子进程 当前的一个进程在fork的时候可以复制当前的进程产生一个进程,这时产生出来的这个进程就是子进程,被复制的进程叫做父进程。子进程会将环境变量从父进程继承过来,或者说被拷贝过来。父进程也会有它的父进程,一…

【动态规划基础】数字三角形(IOI1994)

题目描述 数字三角形 输入输出样例 输入样例#1: 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5输出样例#1: 30思路: 这题可能看到的第一眼——直接贪心然后一层一层判断呀!!!不过很快又会发现,额___好…

小白如何轻松制作产品帮助中心页面?

产品帮助中心是每个网站/产品必不可少的页面,产品帮助中心页面成为了企业提供客户支持和解决方案的重要组成部分。对于初次接触建立帮助中心页面的小白来说,也许会感到一些困惑和无从下手。本文将为小白介绍如何轻松制作产品帮助中心页面,帮助…

16 dplsys GAN

和有监督的分类工作不同,生成任务的目标更不明确。难以评价生成结果的好坏。 Oracle discriminator 假设我们有一个先知判别器oracle discriminator可以分辨我们生成的内容是真还是假。 我们想让生产成的结果足够真实,所以要 fool Oracle discriminato…

将el-table中的展开列(expand)修改成slots自定义插槽

用过element-ui的有知道,展开这个箭头无法自定义,一点办法都没有,官方根本就没提供预留任何位置给你操作。 从下面图中,可以看到有两个插槽,默认插槽和表头插槽。 我们来扩展一个自定义插槽来实现我们想要的功能。…

【dubbo】自定义filter打印接口请求日志

目标 在应用调用dubbo接口或提供的dubbo接口被调用时,通过自定义的filter打印接口请求时的入参信息、服务名、方法名及返回值 实现filter 1. 自定义filter实现类 Slf4j Activate(group {"provider", "consumer"}) public class DubboProvi…

展会动态 | 迪捷软件邀您参加2023ATC汽车电子软件与软件技术周

论坛背景 随着汽车智能化和电动化的发展,汽车电子与软件技术已经成为汽车产业的重点方向。为促进行业创新发展,各大汽车厂商、供应链企业和研究机构都在积极探索新的技术和应用。 2023ATC汽车电子与软件技术周(以下简称“技术周”&#xff…

pytest的fixture梳理

fixture特性 可以重复使用,多个用例可以使用同一个fixture一个测试用例可以使用多个装置 import pytest # Arrange pytest.fixture def first_entry():return "a"# Arrange pytest.fixture def second_entry():return 2# Arrange pytest.fixture def or…

Linux常用命令——dmidecode命令

在线Linux命令查询工具 dmidecode 在Linux系统下获取有关硬件方面的信息 补充说明 dmidecode命令可以让你在Linux系统下获取有关硬件方面的信息。dmidecode的作用是将DMI数据库中的信息解码,以可读的文本方式显示。由于DMI信息可以人为修改,因此里面…

【数据结构与算法】二叉搜索树

文章目录 二叉搜索树的结构二叉搜索树的实现节点的定义二叉搜索树的框架构造函数拷贝构造函数赋值运算符重载析构函数搜索操作插入操作删除操作 二叉搜索树的应用二叉搜索树的效率 二叉搜索树的结构 在浅学一下二叉树链式存储结构的遍历_链式存储二叉树按层次遍历_LeePlace的博…

【SpringBoot】| 接口架构风格—RESTful

目录 一:接口架构风格—RESTful 1. 认识RESTful 2. RESTful 的注解 一:接口架构风格—RESTful 1. 认识RESTful (1)接口 ①接口: API(Application Programming Interface,应用程序接口&…

NLP文本匹配任务Text Matching [有监督训练]:PointWise(单塔)、DSSM(双塔)、Sentence BERT(双塔)项目实践

NLP文本匹配任务Text Matching [有监督训练]:PointWise(单塔)、DSSM(双塔)、Sentence BERT(双塔)项目实践 0 背景介绍以及相关概念 本项目对3种常用的文本匹配的方法进行实现:Poin…

物联网和不断发展的ITSM

物联网将改变社会,整个技术行业关于对机器连接都通过嵌入式传感器、软件和收集和交换数据的电子设备每天都在更新中。Gartner 预测,全球将有4亿台互联设备投入使用。 无论企业采用物联网的速度如何,连接设备都将成为新常态,IT服务…

iVX引领自动编程新时代:从百万应用到普适AST转换的技术突破

一、引言 在人工智能和自动编程的交汇点上,iVX以其独特的自动编程训练模型,正引领着新一轮的技术革命。通过百万个通过iVX IDE生成的应用进行有监督训练,iVX成功地将任意网站或网页转成了iVX IDE中的AST,展示了其强大的技术实力。…

浅谈GIS和三维GIS的区别?

GIS(地理信息系统)和三维GIS(3D地理信息系统)是地理信息领域的两个重要概念,它们在地理数据的处理和分析方面具有不同的特点和应用。可能很多人分不清二者的区别,本文就带大家简单了解一下二者的区别。 定义…

【闲侃历史】 唐朝----安史之乱那些事(1)

说到安史之乱,可谓是唐朝最乱的一段时期,据说唐朝当时也就5000多万人,而经历了这一战,人口只剩1000多万人了。著名的杨国忠和杨贵妃也是在这个时候死的。这个系列我们就先来侃侃发起安史之乱的两个人----安禄山和史思明 一. 安禄…

免费插件集-illustrator插件-Ai插件-路径编辑-统一线宽

文章目录 1.介绍2.安装3.通过窗口>扩展>知了插件4.功能解释5.示例6.总结 1.介绍 本文介绍一款免费插件,加强illustrator使用人员工作效率,统一路径线宽。首先从下载网址下载这款插件 https://download.csdn.net/download/m0_67316550/87890501&am…