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.mzph.cn/news/755533.shtml

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

相关文章

P8680 [蓝桥杯 2019 省 B] 特别数的和 Python

[蓝桥杯 2019 省 B] 特别数的和 题目描述 小明对数位中含有 2 2 2、 0 0 0、 1 1 1、 9 9 9 的数字很感兴趣&#xff08;不包括前导 0 0 0&#xff09;&#xff0c;在 1 1 1 到 40 40 40 中这样的数包括 1 1 1、 2 2 2、 9 9 9、 10 10 10 至 32 32 32、 39 39 39 和 …

洛谷 [传智杯 #5 初赛] B-莲子的机械动力学

题目链接&#xff1a;[传智杯 #5 初赛] B-莲子的机械动力学 题目背景 【题目背景和题目描述的两个题面是完全等价的&#xff0c;您可以选择阅读其中一部分。】 专攻超统一物理学的莲子&#xff0c;对机械结构的运动颇有了解。如下图所示&#xff0c;是一个三进制加法计算器的…

Django 反向解析路由

app2.urls.py from django.urls import path, re_path from . import viewsurlpatterns [path(index, views.index, nameindex),path(url_reverse, views.url_reverse, nameapp2_url_reverse), # 使用reverse()方法反向解析 ,name对于视图的reverse("app2_url_reverse&…

UGUI源码分析与研究1-UGUI底层的实现原理

UGUI&#xff08;Unity GUI&#xff09;是Unity引擎中的一套用户界面系统&#xff0c;用于创建游戏中的各种UI元素。UGUI的底层实现原理主要包括以下几个方面&#xff1a; Canvas&#xff1a;UGUI的核心是Canvas&#xff0c;它是一个渲染容器&#xff0c;用于存放和管理UI元素。…

面临挑战:共享WiFi贴项目能否长久存在?

共享WiFi贴项目会长久吗&#xff1f;这个问题是很多创业者想要了解的事情&#xff0c;随着5G网络和共享经济的兴起&#xff0c;共享WiFi贴项目应运而生。在这个信息时代&#xff0c;网络已成为人们日常生活中不可或缺的一部分&#xff0c;而WiFi作为网络的一种接入方式&#xf…

什么是大型语言模型(LLM)?

大型语言模型 (LLM) 是一种能够理解和生成人类语言文本的机器学习模型。它们通过分析大量语言数据集来工作。 一、什么是大型语言模型 (LLM)&#xff1f; 大型语言模型 (LLM) 是一种人工智能 (AI) 程序&#xff0c;它可以识别和生成文本以及完成其他任务。LLM 经过了庞大的数据…

(vue)Module Error (from ./node_modules/eslint-loader/index.js)

(vue)Module Error (from ./node_modules/eslint-loader/index.js) 方法1&#xff1a;直接关闭eslint // vue.config.js module.exports {lintOnSave: false, //关闭eslint语法检查...... }方法2&#xff1a; 参考&#xff1a;解决参考 解决参考&#xff1a;如何修复vue-cli…

Semantic Scholar简介

简介 在找一些论文搜索API的时候碰巧发现了这个检索网站&#xff0c;简单看看怎么使用&#xff08;tutorial原文&#xff09;。 101 引用概述 Semantic Scholar共有数十亿条引文数据&#xff0c;在此基础上提供科学的文献图谱&#xff0c;使学者们能够浏览和发现所有研究领域中…

Ollama 运行 Cohere 的 command-r 模型

Ollama 运行 Cohere 的 command-r 模型 0. 引言1. 安装 MSYS22. 安装 Golang3. Build Ollama4. 运行 command-r 0. 引言 Command-R Command-R 是一种大型语言模型&#xff0c;针对对话交互和长上下文任务进行了优化。它针对的是“可扩展”类别的模型&#xff0c;这些模型在高…

uniapp+uview 学习笔记(二)—— H5开发

文章目录 前言一、开发步骤1.创建项目2.安装组件库并导入使用3.封装请求4.国际化5.打包 总结 前言 本文主要介绍使用uniapp框架和uview组件库进行H5开发&#xff0c;需要用到的开发工具为HBuilder X。 一、开发步骤 1.创建项目 打开HBuilder X&#xff0c;在顶部栏目选择 新…

Python使用Scapy库修改pcap包MAC地址

要修改pcap包中的MAC地址&#xff0c;你可以使用Scapy这个强大的Python库。Scapy允许你创建、解析、修改和发送网络数据包&#xff0c;包括pcap格式的数据包。 以下是一个基本的步骤示例&#xff0c;用于修改pcap包中的MAC地址&#xff1a; 1.安装Scapy库&#xff1a; 如果你…

网络安全框架和云安全参考架构介绍

目录 一、网络安全框架 1.1 概述 1.2 IATF框架 1.2.1 框架来源 1.2.2 框架结构图 1.2.3 框架内容 1.2.3.1 人&#xff08;People&#xff09; 1.2.3.2 技术&#xff08;Technology&#xff09; 1.2.3.3 操作&#xff08;Operation&#xff09; 1.3 NIST网络安全框架 …

7-4 基于顺序存储结构的图书信息表的创建和输出

作者 周咏梅 单位 广东外语外贸大学 定义一个包含图书信息&#xff08;书号、书名、价格&#xff09;的顺序表&#xff0c;读入相应的图书数据来完成图书信息表的创建&#xff0c;然后统计图书表中的图书个数&#xff0c;同时逐行输出每本图书的信息。 输入格式: 输入n1行&…

javaAPI操作Elasticsearch

mapping属性 mapping是对索引库中文档的约束, 常见的mapping属性包括: type: 字段数据类型,常见的简单类型有: 字符串: text(可分词的文本), keyword(精确值, 例如: 品牌,国家)数值: long, integer, short, byte, double, float布尔: boolean日期: date对象: object index: 是否…

蓝桥集训之全球变暖

蓝桥集训之全球变暖 核心思想&#xff1a;bfs/dfs 搜索连通块 判断连通块中是否所有点都是边界 / 找有无四个方向都是陆地的点 #include<bits/stdc.h>using namespace std;const int N 1010;typedef pair<int,int> PII;int n;char g[N][N];int hh,tt; //队列P…

Hive 数据迁移与备份

迁移类型 同时迁移表及其数据&#xff08;使用import和export&#xff09; 迁移步骤 将表和数据从 Hive 导出到 HDFS将表和数据从 HDFS 导出到本地服务器将表和数据从本地服务器复制到目标服务器将表和数据从目标服务器上传到目标 HDFS将表和数据从目标 HDFS 上传到目标 Hiv…

FX110网:“炒金热”再现,汇友却被困在了假冒万洲金业!

近日&#xff0c;一汇友炒金就选错了平台&#xff0c;他交易的“万洲金业”不对劲&#xff01; 在假冒“万洲金业”反复折腾 据汇友描述&#xff0c;他此前经朋友指导&#xff0c;下载了一个“万洲金业”的APP&#xff0c;该平台宣称为香港金银业贸易场AA类141号行员&#xff0…

[C++提高编程](二):模板--类模板

目录 类模板语法 类模板与函数模板的区别 类模板中的成员函数创建时机 类模板对象做函数参数 类模板与继承 类模板成员函数类外实现 类模板份文件编写 类模板与友元 类模板使用示例 类模板的作用 建立一个通用类&#xff0c;类中的成员&#xff0c;数据类型可以不具体…

在Linux系统安装MySQL步骤

准备工作&#xff1a;下载好mysql&#xff08;Mariadb&#xff09;安装包&#xff1a; 第一步&#xff1a;检查系统中是否有自带的MySQL&#xff08;Mariadb&#xff09;&#xff1b; # 下面这两个都执行一下 [rootcentos101 opt]# rpm -qa | grep mysql [rootcentos101 opt]#…

大数据面试题 —— Flume

目录 介绍 FlumeFlume 架构请说一下你提到的几种 source 的不同点Flume 传输数据时如何保证数据一致性TailDir 为什么可以断点重传说下Flume事务机制Sink 消费能力弱&#xff0c;Channel 会不会丢失数据数千个Flume要怎么统一配置&#xff0c;修改就分发吗Flume一个节点宕机了怎…