爬虫爬取二次元网站美女图片

article/2025/9/22 12:56:11

爬虫爬取二次元网站美女图片

    • 前言
    • xpath解析
    • 需求分析
    • 代码编写
    • 总代码

前言

本次需要爬取二次元网站cos板块下的图片
需要用到request模块与lxml模块,所以请提前安装好这两个模块,打开cmd程序输入

requestlxml
pip install requestpip install lxml

xpath解析

xpath解析:最常用最便捷高效的一种解析方式,通用性。
-xpath解析原理:
- 1.实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中
- 2.调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获
- 环境的安装:
- pip install lxml
- 如何实例化一个etree对象:from lxml import html etree = html.etree
- 1.将本地的html文档中的源码数据加载到etree对象中:
etree.parse(filePath)
- 2.可以将从互联网上获取的页面源码数据加载到该对象中
etree.HTML(‘page_text’)
- xpath(‘xpath表达式’)
- xpath表达式
- /:表示的是从根节点开始定位。表示的是一个层级
- //:表示的是多个层级,可以表示从任意位置开始定位
- 属性定位://div[@class=“song”] tag[@attrName=“attrValue”]
- 索引定位://div[@class=“fixedNav”]/div[2] 索引是从1开始的。
- 取文本:
- /text()获取的是标签中直系的文本内容
- //text()标签中非直系的文本内容(所有的文本内容)
- 取属性
- @attrName ==> div/@attrName

需求分析

首先打开网站,点击下一页,会发现网站的url是没有变化的
第一页:

在这里插入图片描述

第二页:

在这里插入图片描述
说明网站的内容是动态加载的,需要获取网站的ajax请求到的json数据,在网站页面点击鼠标右键,点击检查,在点击Network,最后点击XHR,这是用来获取ajax请求的。使其如下图一样
在这里插入图片描述
然后点击第二页,会有这样的请求
在这里插入图片描述
请求的url是:https://www.hmecy.com/wp-admin/admin-ajax.php?action=zrz_load_more_posts
请求方式的:post
请求携带的参数是:type: tag42,paged: 2

点击请求的Response,会发现请求返回信息中有一组html数据,这组html数据中就包含如下板块的内容
这样咱们就获取到了页面的信息

接下来随便点击一个标签,进入她的详情页,咱们要获取标题和下载图片,如图
在这里插入图片描述
你会发现它的图片都在id为‘content-innerText’的div中
标题在h1标签中
在这里插入图片描述

代码编写

首先导包

import requests
from lxml import html
import os
from multiprocessing.dummy import Pool
import time

本次需要用到三个函数

1、down_img

#下载图片的函数,使用多线程下载
def down_img(arr):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}content = requests.get(url=arr[1][0], headers=headers).contentwith open(arr[0], 'wb')as fp:fp.write(content)print("下载完成一张")time.sleep(0.3)

arr参数里面包含需要图片文件的路径和url网址,访问url得到其中的二进制数据,再将其下载到指定文件内

2、correct_title

#处理图片文件夹的标题
def correct_title(title):error_set = ['/', '\\', ':', '*', '?', '"', '|', '<', '>']for c in title:if c  in error_set:title = title.replace(c, '')return title

该函数用于纠正文件夹的标题,因为:
在这里插入图片描述
需要将获得的标题进行修改,将其中的非法关键词换为空

3、main

if __name__=="__main__":start = time.time()etree = html.etree#ajax请求的urlurl = 'https://www.hmecy.com/wp-admin/admin-ajax.php?action=zrz_load_more_posts'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}#所有图片的url链接储存在这里all_url = []if not os.path.exists('./erciyuan'):os.mkdir('./erciyuan')#下载前4页的图片,可以根据自己需要更改循环次数for num in range(1,5):data = {'type': 'tag42','paged': str(num)}#获取请求到的json函数response = requests.post(url=url,headers=headers,data=data).json()#分析json函数,发现html代码在key为msg的value中response = str(response['msg'])tree = etree.HTML(response)data_list = tree.xpath('//a[@class="link-block"]/@href')for urls in data_list:page_text = requests.get(url=urls,headers=headers).textdetail_tree = etree.HTML(page_text)#获取标题title = detail_tree.xpath('//*[@id="post-single"]/h1/text()')#修改标题titles = correct_title(str(title))#存储的文件夹路径paths = './erciyuan/' + str(titles)url_list = detail_tree.xpath('//*[@id="content-innerText"]//img')data_ins = []i = 0#创建文件夹if not os.path.exists(paths):os.mkdir(paths)for ins in url_list:#获取图片的urldata_url = ins.xpath('./@src')#图片的存储路径path = paths +'/'+ str(i) +'.jpg'i=i+1#将路径与图片的url存储到all_url中,方便后面使用多线程下载all_url.append([path,data_url])#创建4个线程pool = Pool(4)#将函数与all_url列表放入线程pool.map(down_img,all_url)print(time.time()-start)

访问ajax请求的url,传入对应的参数,若想访问其他板块,改变对应的参数即可,分析其中的json数据
在这里插入图片描述
html代码都在key为msg的value中,获取该信息,对其进行xpath解析,得到所有详情页对应的url

data_list = tree.xpath('//a[@class="link-block"]/@href')

访问详情页的url,再通过xpath解析,获取文章的标题和该页面的img列表

title = detail_tree.xpath('//*[@id="post-single"]/h1/text()')
url_list = detail_tree.xpath('//*[@id="content-innerText"]//img')

对列表进行循环

            for ins in url_list:#获取图片的urldata_url = ins.xpath('./@src')#图片的存储路径path = paths +'/'+ str(i) +'.jpg'i=i+1#将路径与图片的url存储到all_url中,方便后面使用多线程下载all_url.append([path,data_url])

对img解析xpath解析,获取其中的src属性值,再给其一个存储路径,存储到all_url中
最后使用多线程进行下载。

总代码

import requests
from lxml import html
import os
from multiprocessing.dummy import Pool
import time#下载图片的函数,使用多线程下载
def down_img(arr):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}content = requests.get(url=arr[1][0], headers=headers).contentwith open(arr[0], 'wb')as fp:fp.write(content)print("下载完成一张")time.sleep(0.3)#处理图片文件夹的标题
def correct_title(title):error_set = ['/', '\\', ':', '*', '?', '"', '|', '<', '>']for c in title:if c  in error_set:title = title.replace(c, '')return titleif __name__=="__main__":start = time.time()etree = html.etree#ajax请求的urlurl = 'https://www.hmecy.com/wp-admin/admin-ajax.php?action=zrz_load_more_posts'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}#所有图片的url链接储存在这里all_url = []if not os.path.exists('./erciyuan'):os.mkdir('./erciyuan')#下载前4页的图片,可以根据自己需要更改循环次数for num in range(1,5):data = {'type': 'tag42','paged': str(num)}#获取请求到的json函数response = requests.post(url=url,headers=headers,data=data).json()#分析json函数,发现html代码在key为msg的value中response = str(response['msg'])tree = etree.HTML(response)data_list = tree.xpath('//a[@class="link-block"]/@href')for urls in data_list:page_text = requests.get(url=urls,headers=headers).textdetail_tree = etree.HTML(page_text)#获取标题title = detail_tree.xpath('//*[@id="post-single"]/h1/text()')#修改标题titles = correct_title(str(title))#存储的文件夹路径paths = './erciyuan/' + str(titles)url_list = detail_tree.xpath('//*[@id="content-innerText"]//img')data_ins = []i = 0#创建文件夹if not os.path.exists(paths):os.mkdir(paths)for ins in url_list:#获取图片的urldata_url = ins.xpath('./@src')#图片的存储路径path = paths +'/'+ str(i) +'.jpg'i=i+1#将路径与图片的url存储到all_url中,方便后面使用多线程下载all_url.append([path,data_url])#创建4个线程pool = Pool(4)#将函数与all_url列表放入线程pool.map(down_img,all_url)print(time.time()-start)

http://chatgpt.dhexx.cn/article/5sVaSXTG.shtml

相关文章

小爬虫sitemap网站seo优化(黄梦岚)

其实关于SEO优化网络有什么多种的方法&#xff0c;可以通过自己提交链接给百度让网络蜘蛛爬到,也可以使用我这种方法.下面给大家介绍一下小爬虫sitemap网站的seo优化,在这里申明我喜欢的人是黄梦岚(湖南永州东安)一辈子都喜欢话不多说我们开讲吧&#xff01;&#xff01;&#…

与虫子尾交3d动画网站_这六款好用的3D建模软件,总有一款是你想要的!

在现在这个科技迅速发展的时代,各种3D模型以及在我们的学习和生活中随处可见。立体的三维模型能让我们对展示的对象有着更直观的认知。那么,那些炫酷的3D模型究竟是怎么做出来的呢? 3D模型的制作和呈现最离不开的就是3D建模软件了,今天,小奇就要为大家介绍几款主流好用的…

六款堪称神器的网站

导读网站是通往互联网世界的一大工具,在这片信息的海洋上,总有那么几款产品,如海岛般骄傲伫立,带给人不一样的感觉。当然,本文的标题是有失公允的,世界是优秀的产品不计其数,要分类罗列出来简直不够写,所以本文所列举的网站仅作个人意见,方便阅读。1. 花蜜 | 不一样的…

2017年最受欢迎的10大商城网站

在电商和线上购物快速发展的今天&#xff0c;拥有一个商城网站很是必要&#xff0c;关于试水独立商城的好处大家可以浏览《有了淘宝京东&#xff0c;为什么还要自建商城网站?》查看。但是&#xff0c;搭建商城网站并不简单&#xff0c;庆幸的是目前市面上涌现了不少建站平台&a…

漂亮的带搜索框蓝黄拼色网站404页面源码

简介&#xff1a; 蓝黄拼凑起来的两种底色的404页面&#xff0c;比较少见&#xff0c;还别说&#xff0c;这样一搭配还是比较靓丽。 着404页面犹如我们穿的衣服&#xff0c;还是要合理打扮和搭配&#xff0c;这个就是百搭。 同时&#xff0c;页面还有一个搜索框&#xff0c;但…

艰难提权某黄色网站服务器

手提liu百多个黄色网站De服务器。 #继昨晚之后再一次提下一个08r2服务器,这次实属不易从下午一两点到方才现在约晚上十一点,学到新姿势了,心情还是很不错的。故事是这样的,六点多钟睡觉的我,到了九点钟,还是翻来覆去想日站。行吧,起床!日站走起。 逼装完了,说过程吧。…

在橙黄色网站设计中寻找灵感

在千变万化的色彩世界中&#xff0c;人们视觉感受到的色彩非常丰富&#xff0c;所以配色至关重要&#xff0c;网站设计的关键是选择正确的配色方案&#xff0c;配色的好坏可以直接影响网站的整体设计&#xff0c;好的配色可以通过改变空间的舒适程度和环境气氛来满足人们的各方…

20个黄色网页设计,激发你的灵感

当设计一个网站时&#xff0c;最常见的一个挑战是研发一种有效的配色方案。enqoo收集了20个黄色为主的网页&#xff0c;看看有没有你喜欢的。 Kim The Movie 1pooya Desyn Artigianasud Marlin Jackson RS Mehra elless michik Multimedios cldesignz Rillusion School of Medi…

50个启发你灵感的黄色系网站设计

译自&#xff1a; 50 Yellow Web Designs to Inspire You 色彩在网站设计中是一个很重要的方面。 好的设计师会小心的选择色彩来达到一个目的。有的时候&#xff0c;这个目的就是醒目些以获得用户的注意&#xff0c;而黄色正好是一个很棒的“吸引注意”的色彩。黄色是一个高度…

医院门诊管理系统之信息管理

打开医院门诊管理系统中的信息管理分有科室管理&#xff0c;医生管理和项目管理 一&#xff1a;科室管理可以修改信息&#xff0c;添加信息和删除信息。还有更新键确保信息及时更新。 二&#xff1a;医生信息管理可以根据医生的性别或科室筛选资料。 三&#xff1a;诊疗项目信息…

017ssm电子病历管理系统医院管理系统java

医疗保障是社会民生基础&#xff0c;特别是在我国&#xff0c;人口众多且人口老龄化严重&#xff0c;这对医院提出了新的要求。我国医院不论是医疗水平还是管理水平都与国外发达国家存在差距&#xff0c;且在国内地区差异也比较大&#xff0c;满足不了日益增长的医疗需求。信息…

医院HIS系统流程

医院HIS系统业务流程 一、门诊部分&#xff1a; 1、流程&#xff1a;病人——》导诊处办卡——》挂号处——》医生开单——》 收费处收费——》药方领药/医技科室检查。 2、注意事项&#xff1a; A、导诊处给病人分配卡号&#xff0c;录入基病人基本信息&#xff08;姓名、性…

医院信息管理系统需求分析

医院信息管理系统1.0 一、导言 1.1 编写目的 本需求说明文档描述了医院管理系统项目的要求&#xff0c;作为系统设计、项目目标以及项目验收的依据。需求分析详细描述了用户对功能的需求、对性能的需求以及对运行环境的需求。 软件开发小组的每位成员应该阅读本需求说明&#x…

医院管理系统(Java)

医院管理系统(Java) 特别说明&#xff1a;因为是课设仓促做出来的成品&#xff0c;在有些地方会有小BUG&#xff0c;例如返回主菜单会让普通用户返回至管理员管理菜单上。若有大神可自行修改路径。 GitHub仓库&#xff1a;点击此处 实训报告&#xff1a;点击此处 一、系统需求…

医院住院管理信息系统类图

医院住院管理信息系统类图 一、类图 1.1 病房管理 类间关系说明&#xff1a; •医生与护士为多对多的关系。 •护士与病人为一对多关系。 •护士与床位为一对多关系。 •医生与病人为多对一关系。 主要方法说明&#xff1a; 如图1.1所示&#xff0c;医生通过入院登记&#xff0…

住院管理系统

开发工具(eclipse/idea/vscode等)&#xff1a;vs2017 数据库(sqlite/mysql/sqlserver等)&#xff1a;sqlserver 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a;基于ASP.net的住院管理系统 (1)用户注册:用户首次登录该系统时需要提交用户注册。(2)用户登录:用户可以登…

医院分诊管理系统

医院分诊管理管理系统 随着信息科学技术的迅速发展&#xff0c;当今医学科学的研究对计算机技术的依赖性越来越强&#xff0c;医院的信息化建设已经迫在眉捷&#xff0c;而门诊部是医院的一个重要部门&#xff0c;也是病人就诊的第一个环节&#xff0c;是医院直接向社会广大患者…

医院电子病历系统信息安全解决方案

引自 http://mp.weixin.qq.com/s?__bizMjM5NTYxNDUzMA&mid2650800877&idx1&sn21f1139bbc50487b7d38780c6ab4c5cf&scene23&srcid0616vhwOwxkLA0i1oLZ3u0hz#rd 一、需求分析 随着电子病历系统在医院的普遍使用&#xff0c;病历无纸化存储再也不是空谈概念&…

医院管理信息系统解决方案

1.1.1.决策支撑平台技术架构 整个技术架构分为三层结构&#xff0c;分别为&#xff1a; 1) 数据层&#xff1a;即“医院决策分析系统”所需要的原始数据来源&#xff0c;其中包括了HIS业务系统、临床信息系统、物质设备系统、财务系统、成本核算系统、其他相关业务系统&…

病人就医管理系统

病人就医管理系统 一.课程设计目的 1.培养学生程序设计开发的基本素质、思维方法&#xff1b; 2.培养分析和解决问题的能力&#xff1b; 3.使学生在实践过程中灵活运用所学的知识&#xff0c;逐渐掌握复杂软件的设计和开发技能&#xff0c;为后面的认知实习与社会实践打下基础…