Python爬虫案例-爬取主题图片(可以选择自己喜欢的主题)

在这里插入图片描述

2024年了,你需要网络资源不能还自己再慢慢找吧?
跟着博主一块学习如何利用爬虫获取资源,从茫茫大海中寻找那个她到再妹子群中找妹子,闭着眼睛都可以找到合适的那种。文章有完整示例代码,拿过来就可以用,欢迎实践尝试。

-
˃̣̣̣̣˂
˗ˏˋˎ˗

1.案例简介

本次案例主要针对网络图片下载,使用网络爬虫技术抓取百度图片,能够根据指定的关键字搜索相关主题的图片,然后把图片下载到本地指定的文件夹中。本次讲解内容主题是python,大家实践可以换成自己喜欢的主题。

2.设计思路

目标:通过百度图片引擎入口,抓取指定主题的图片,然后把抓取的图片保存到本地文件夹中。

设计爬虫,首先需要把握抓取对象(URL)的规律。分析网页源代码和网页结构,配合F12键查看网页源代码。这一步是抓取成功的关键。

接着,借助HTTP第三方库,获取HTML源代码;使用正则表达式、XPath表达式等技术,解析其结构,根据一定的逻辑分解其中的图片URL。

最后,把网上URL图片保存到本地,完成本例操作。

3.关键技术

把网上图片下载到本地。可以使用request.urlretrieveO函数;也可以使用Python的文件操作函数write()写入文件。

爬取指定网页中的图片。首先用urllib库来模拟浏览器访问网站的页的源代码(htinl标签)。其中,源代码以字符串的形式返回;然后用正则表达式re库在字符串(网页源代码)中匹配表示图片链接的子字符串,返 回一个列表;最后循环列表,根据图片链接将图片保存到本地。

也可以使用BeautifulSoup抓取图片。BeautifulSoup是一个Python处理HTML/XML的函数库,是Python内置的网页分析工具,用来快速地转换被抓取的网页。它产生一个转换后DOM树,尽可能和原文档内容的含义一致,这种措施通常能够满足用户搜集数据的需求。BeautifulSoup提供了一些简单的方法以及类Python语法来查找、定位、修改一棵转换后DOM树。BeautifulSoup自动将送进来的文档转换为Unicode编码,而且在输出的时候转换为UTF-8

使用requests请求URL和读取网页源代码。requests库和urllib库的作用相似且使用方法基木一致,都是根据HTTP协议操作各种消息和页而,但使用requests库比使用urllib库更简单些。

4.设计过程

第1步,先研究百度图片的入口规律。

进入百度图片(https://image.baidu.com/ ),输入某个关键字(如python),然后单击“百度一下”按钮搜索,可见如下网址:

https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&hs=0&xthttps=111111&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=python&oq=python&rsp=-1

在这里插入图片描述

其中,word=python查询字符串表示搜索的主题。所看见的页面是瀑布流版木,当向下滑动的时候可以不停刷新,这是一种动态的网页。需要按F12键,通过Network下的XHR分析网页的结构。
在这里插入图片描述

第2步,找到源代码规律之后,就可以动手编写Python代码了。
在这里插入图片描述

5.示例结果

在这里插入图片描述
在这里插入图片描述

6.示例源码

# test1.py  运行程序之前,需要现在当前目录下创建pictures文件夹。
# 导入库
import requests 
import os.path
import  re
# 设置默认配置
MaxSearchPage = 20 # 收索页数
CurrentPage = 0 # 当前正在搜索的页数
DefaultPath = "pictures" # 默认储存位置
NeedSave = 0 # 是否需要储存
# 图片链接正则和下一页的链接正则
def imageFiler(content): # 通过正则获取当前页面的图片地址数组return re.findall('"objURL":"(.*?)"',content,re.S)
def nextSource(content): # 通过正则获取下一页的网址next = re.findall('<div id="page">.*<a href="(.*?)" class="n">',content,re.S)[0]print("---------" + "http://image.baidu.com" + next) return next
# 爬虫主体
def spidler(source):content = requests.get(source).text  # 通过链接获取内容imageArr = imageFiler(content) # 获取图片数组global CurrentPageprint("当前页: " + str(CurrentPage) )for imageUrl in imageArr:print(imageUrl)global  NeedSaveif NeedSave:  			# 如果需要保存图片则下载图片,否则不下载图片global DefaultPathtry:# 下载图片并设置超时时间,如果图片地址错误就不继续等待了picture = requests.get(imageUrl,timeout=10) except:                print("下载错误! errorUrl:" + imageUrl)   continue# 创建图片保存的路径# imageUrl = imageUrl.replace('/','').replace(':','').replace('?','')imageUrl1 = os.path.basename(imageUrl)basepath = os.getcwd()print( imageUrl1 )pictureSavePath = basepath + "/" + DefaultPath + imageUrl1pictureSavePath = pictureSavePath.split("?")[0]print(pictureSavePath)fp = open(pictureSavePath,'wb') # 以写入二进制的方式打开文件fp.write(picture.content)fp.close()global MaxSearchPageif CurrentPage <= MaxSearchPage:    # 继续下一页爬取if nextSource(content):CurrentPage += 1 # 爬取完毕后通过下一页地址继续爬取spidler("http://image.baidu.com" + nextSource(content)) 
#爬虫的开启方法
def  beginSearch(page=1,save=0,savePath="pictures/"): # (page:爬取页数,save:是否储存,savePath:默认储存路径)global MaxSearchPage,NeedSave,DefaultPathMaxSearchPage = pageNeedSave = save					# 是否保存,值0不保存,1保存DefaultPath = savePath				# 图片保存的位置key = input("请输入关键词: ") StartSource = "http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=" + str(key) + "&ct=201326592&v=flip" # 分析链接可以得到,替换其`word`值后面的数据来搜索关键词spidler(StartSource)
#调用开启的方法就可以通过关键词搜索图片了
beginSearch(page=5,save=1)			# page=5是下载前5页,save=1保存图片

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【智能算法】多元宇宙优化算法(MVO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2016年&#xff0c;Mirjalili 等人受到宇宙膨胀理论启发&#xff0c;提出了多元宇宙优化算法(Multi-verse Optimization, MVO)。 2.算法原理 2.1算法思想 MVO基于宇宙膨胀的原理&#xff0c;利用…

python 教你如何创建一个自定义库 colorlib.py

目录 Colorlib 生成代码 模块代码 导入测试 测试一 测试二 应用测试 颜色列表 colorList 随机颜色元组 randcolorTuples 随机颜色字串 randcolorStrings Color类测试 测试一 测试二 题外话 Colorlib 有没有碰到过这样的场景&#xff1a;写代码时想要用上丰富的色…

huggingface的transformers训练gpt

目录 1.原理 2.安装 3.运行 ​编辑 4.数据集 ​编辑 4.代码 4.1 model init​编辑 forward&#xff1a; 总结&#xff1a; 关于loss和因果语言模型&#xff1a; ​编辑 交叉熵&#xff1a;​编辑 记录一下transformers库训练gpt的过程。 transformers/examples/…

鸿蒙开发之导航栏tabs(类似Android tablayout)

当页面信息较多时&#xff0c;为了让用户能够聚焦于当前显示的内容&#xff0c;需要对页面内容进行分类&#xff0c;提高页面空间利用率。Tabs组件可以在一个页面内快速实现视图内容的切换&#xff0c;一方面提升查找信息的效率&#xff0c;另一方面精简用户单次获取到的信息量…

使用uniapp,uni-data-select组件时,内容长度没超过容器宽度时候虽然能显示全内容但是数据后边会出现三个点,逼死强迫症

项目场景&#xff1a; 微信小程序开发&#xff0c;使用uniapp&#xff0c;uni-data-select组件时&#xff0c;内容长度没超过容器宽度时候虽然能显示全内容但是数据后边会出现三个点&#xff0c;逼死强迫症 解决方案&#xff1a; 找到组件的源代码&#xff0c;然后删除那三个…

图像几何变换(仿射变换和透视变换...)及python-opencv实现

文章目录 图像变换类型仿射变换透视变换python-opencv实现参考文献 图像变换类型 图像几何变换主要包括以下几种类型&#xff1a; 平移&#xff08;Translation&#xff09;&#xff1a;将图像在水平或垂直方向上移动&#xff0c;不改变图像的尺寸和形状。缩放&#xff08;Sca…

声控小助手:文本语音呼唤技术的应用与实现

title: 声控小助手&#xff1a;文本语音呼唤技术的应用与实现 date: 2024/3/22 18:20:42 updated: 2024/3/22 18:20:42 tags: 文本语音呼唤技术原理Python实现优缺点分析应用场景未来展望人机交互 1. 引言 在当今数字化时代&#xff0c;文本语音呼唤技术正逐渐成为人们生活中…

新零售SaaS架构:线上商城系统架构设计

零售商家为什么要建设线上商城&#xff1f; 传统的实体门店服务范围有限&#xff0c;只能吸引周边500米以内的消费者。因此&#xff0c;如何拓展服务范围&#xff0c;吸引更多的消费者到店&#xff0c;成为了店家迫切需要解决的问题。 缺乏忠实顾客&#xff0c;客户基础不稳&…

聊聊芯片中的动态功耗( Dynamic Power)

一、Dynamic Power 概念 动态功耗&#xff1a;主要包括动态开关电流引起的Switching Power和MOS管内部的Internal Power。 1.1 翻转功耗 我们先看Switching Power&#xff0c;开关功耗是指在逻辑门开关时所引起的功耗&#xff0c;在CMOS逻辑门输出节点产生逻辑转换时…

Linux--Shell脚本安装 httpd 和 修改IP

shell脚本 关闭防火墙、安装httpd、启动httpd [rootnode11 ~]# mkdir shell[rootnode11 ~]# vim abc.sh #!/bin/bash#安装httpd服务#1、挂载 准备yum源 mount /dev/sr0 /mnt &> /dev/nulldf$(df -h | grep /dev/sr0 | awk {print $6})if [ "$df" "/mn…

【C++】手撕红黑树

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;能直接手撕红黑树。 > 毒鸡汤&#xff1a;行到…

redis-黑马点评-商户查询缓存

缓存&#xff1a;cache public Result queryById(Long id) {//根据id在redis中查询数据String s redisTemplate.opsForValue().get(CACHE_SHOP_KEY id);//判断是否存在if (!StrUtil.isBlank(s)) {//将字符串转为bean//存在&#xff0c;直接返回Shop shop JSONUtil.toBean(s, …

深度学习500问——Chapter04:经典网络解读(1)

文章目录 4.1 LeNet-5 4.1.1 模型介绍 4.1.2 模型结构 4.1.3 模型特性 4.2 AlexNet 4.2.1 模型介绍 4.2.2 模型结构 4.2.3 模型特性 4.3 ZFNet 4.3.1 模型介绍 4.3.2 模型结构 4.3.3 模型特性 4.4 Network in Network 4.4.1 模型介绍 4.4.2 模型结构 4.4.3 模型特性 4.1 LeNet-…

MySQL的基本操作

目录 引言 一、SQL语句简介 &#xff08;一&#xff09;SQL通用语法 &#xff08;二&#xff09;SQL分类 &#xff08;三&#xff09;数据类型 1.数值类型 2.字符串类型 3.日期/时间类型 4.修饰符 二、登录mysql服务 三、SQL语句操作 &#xff08;一&#xff09;DD…

canopen使用

CAN 总线协议 1&#xff09;、启动SDO 下载协议 ccs&#xff1a;客户端 指定命令 1&#xff1a;开始下载请求 •scs&#xff1a;服务器命令符 3&#xff1a;开始下载响应 •n&#xff1a;只有当e 1和s1&#xff0c;否则为0。如果有效则表示字节在d不这样做的数量有效包…

【Selenium(一)】

简介 Selenium是一个开源的自动化测试工具&#xff0c;主要用于Web应用程序的自动化测试。它支持多种浏览器&#xff0c;包括Chrome、Firefox、Internet Explorer等&#xff0c;以及多种编程语言&#xff0c;如Java、Python、C#、Ruby等&#xff0c;使得它成为Web自动化测试中…

AI PPT生成工具 V1.0.0

AI PPT是一款高效快速的PPT生成工具&#xff0c;能够一键生成符合相关主题的PPT文件&#xff0c;大大提高工作效率。生成的PPT内容专业、细致、实用。 软件特点 免费无广告&#xff0c;简单易用&#xff0c;快速高效&#xff0c;提高工作效率 一键生成相关主题的标题、大纲、…

Linux 系统是如何收发⽹络包的

Linux 系统是如何收发⽹络包的&#xff1f; ⽹络模型 为了使得多种设备能通过⽹络相互通信&#xff0c;和为了解决各种不同设备在⽹络互联中的兼容性问题&#xff0c;国际标准化组织制定了开放式系统互联通信参考模型&#xff08;Open System Interconnection Reference Mode…

吴恩达机器学习笔记 二十六 决策树学习过程 独热编码one-hot

决策树的学习过程 1. 所有样本都在根结点 2.计算所有可能的特征的信息增益&#xff0c;选择信息增益最大的那个 3.根据选择的特征分离数据集&#xff0c;创造左右两支子树 4.继续进行分裂直到达到停止标准。停止标准有&#xff1a;一个节点只有一类样本&#xff1b;分裂一…

比堆垛机方案省电65% 实施快50% 四向车系统柔性化建设进程异军突起

对物流企业来说&#xff0c;供应链的数智化升级并非“赶时髦”&#xff0c;它需要找到一个既懂物流行业&#xff0c;又有数字化技术作基础的仓储方案提供商。而河北沃克基于AI底层技术、软硬一体化产品体系和技术创新行业经验双轮驱动的业务团队等“技术产品人才”三位一体优势…