python爬虫 爬取网页图片

目录

一:爬虫基础

二:安装html解析的python工具

三:爬取网页图片


一:爬虫基础

爬虫基本过程:

1.请求标头 headers

2.创建一个会话 requests.Session

3.确定请求的路径

4.根据路径获取网页资源(HTML文件)

5.解析html文件BeautifulSoup div a 标签 获取对应的图片

6.建立网络连接进行下载  创建出下载的图片

了解基本HTML结构

保存带有图片的网页

查找带有data-imgurl属性的标签获取url

<html><head></head><body></body>
</html>

头:引用资源

体:包含一切标签

可以 F12 或者 ctrl+shift+i 打开控制台,查看网页代码,获取自己想要的信息

二:安装html解析的python工具

具体可以参考下面的这篇文章:

https://blog.csdn.net/m0_56051805/article/details/128407402

三:爬取网页图片

以爬取百度网页图片为例,大致实现如下

根据地址查找对应图片的信息:

# 根据地址去查找 对应的图片的信息
def Find(url, A):global List  # 保存信息的列表print('正在检测图片总数,请稍等.....')t = 0i = 1s = 0while t < 1000:# 时间戳 不简单刷新访问网址Url = url + str(t)try:# get获取数据Result = A.get(Url, timeout=7, allow_redirects=False)except BaseException:t = t + 60continueelse:# 拿到网站的数据result = Result.text# 找到图片urlpic_url = re.findall('"objURL":"(.*?)",', result, re.S)# 图片总数s += len(pic_url)if len(pic_url) == 0:breakelse:List.append(pic_url)t = t + 60return s

记录下相关的数据信息:

# 记录相关数据
def recommend(url):Re = []try:html = requests.get(url, allow_redirects=False)except error.HTTPError as e:returnelse:html.encoding = 'utf-8'# html文件解析bsObj = BeautifulSoup(html.text, 'html.parser')div = bsObj.find('div', id='topRS')if div is not None:listA = div.findAll('a')for i in listA:if i is not None:Re.append(i.get_text())return Re

对相应网页的图片进行下载:

# 下载图片
def dowmloadPicture(html, keyword):global num# 找到图片urlpic_url = re.findall('"objURL":"(.*?)",', html, re.S)print('找到关键词:' + keyword + '的图片,开始下载图片....')for each in pic_url:print('正在下载第' + str(num + 1) + '张图片,图片地址:' + str(each))try:if each is not None:pic = requests.get(each, timeout=7)else:continueexcept BaseException:print('错误,当前图片无法下载')continueelse:string = file + r'\\' + str(num) + '.jpg'fp = open(string, 'wb')fp.write(pic.content)fp.close()num += 1if num >= numPicture:return

伪装成浏览器向网页提取服务:

if __name__ == '__main__':  # 主函数入口# 模拟浏览器 请求数据 伪装成浏览器向网页提取服务headers = {'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Connection': 'keep-alive','User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0','Upgrade-Insecure-Requests': '1'}# 创建一个请求的会话A = requests.Session()# 设置头部信息A.headers = headersword = input("输入要搜索的关键词:")# 拼接路径url = 'https://image.baidu.com/search/flip?ct=201326592&cl=2&st=-1&lm=-1&nc=1&ie=utf-8&tn=baiduimage&ipn=r&rps=1&pv=&fm=rs1&word=' + word# 根据路径去查找total = Find(url, A)# 记录相关推荐图片Recommend = recommend(url)print('经过检测%s类图片共有%d张' % (word, total))numPicture = int(input('输入要下载的数量'))file = input('请建立一个存储图片的文件夹,输入文件夹名称即可: ')y = os.path.exists(file)if y == 1:print('该文件已存在,请重新输入')file = input('请建立一个存储图片的文件夹,)输入文件夹名称即可: ')os.mkdir(file)else:os.mkdir(file)t = 0tmp = urlwhile t < numPicture:try:url = tmp + str(t)result = requests.get(url, timeout=10)print(url)except error.HTTPError as e:print('网络错误,请调整网络后重试')t = t + 60else:dowmloadPicture(result.text, word)t = t + 60

测试过程如下

1 输入要搜索的图片,可以检索网页图片的数量

2 输入自己想要下载的图片数量,同时创建一个存储下载图片的文件夹

3 等待下载完即可

4 到新创建的文件夹下可以查看到,网页上获取到的图片已经下载

文章学习自: 学术菜鸟小晨 博主的文章

百度,搜狗,360网络爬图

完整源码分享如下

import re
import requests
from urllib import error
from bs4 import BeautifulSoup
import osnum = 0
numPicture = 0
file = ''
List = []# 根据地址去查找 对应的图片的信息
def Find(url, A):global List  # 保存信息的列表print('正在检测图片总数,请稍等.....')t = 0i = 1s = 0while t < 1000:# 时间戳 不简单刷新访问网址Url = url + str(t)try:# get获取数据Result = A.get(Url, timeout=7, allow_redirects=False)except BaseException:t = t + 60continueelse:# 拿到网站的数据result = Result.text# 找到图片urlpic_url = re.findall('"objURL":"(.*?)",', result, re.S)# 图片总数s += len(pic_url)if len(pic_url) == 0:breakelse:List.append(pic_url)t = t + 60return s# 记录相关数据
def recommend(url):Re = []try:html = requests.get(url, allow_redirects=False)except error.HTTPError as e:returnelse:html.encoding = 'utf-8'# html文件解析bsObj = BeautifulSoup(html.text, 'html.parser')div = bsObj.find('div', id='topRS')if div is not None:listA = div.findAll('a')for i in listA:if i is not None:Re.append(i.get_text())return Re# 下载图片
def dowmloadPicture(html, keyword):global num# 找到图片urlpic_url = re.findall('"objURL":"(.*?)",', html, re.S)print('找到关键词:' + keyword + '的图片,开始下载图片....')for each in pic_url:print('正在下载第' + str(num + 1) + '张图片,图片地址:' + str(each))try:if each is not None:pic = requests.get(each, timeout=7)else:continueexcept BaseException:print('错误,当前图片无法下载')continueelse:string = file + r'\\' + str(num) + '.jpg'fp = open(string, 'wb')fp.write(pic.content)fp.close()num += 1if num >= numPicture:returnif __name__ == '__main__':  # 主函数入口# 模拟浏览器 请求数据 伪装成浏览器向网页提取服务headers = {'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Connection': 'keep-alive','User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0','Upgrade-Insecure-Requests': '1'}# 创建一个请求的会话A = requests.Session()# 设置头部信息A.headers = headersword = input("输入要搜索的关键词:")# 拼接路径url = 'https://image.baidu.com/search/flip?ct=201326592&cl=2&st=-1&lm=-1&nc=1&ie=utf-8&tn=baiduimage&ipn=r&rps=1&pv=&fm=rs1&word=' + word# 根据路径去查找total = Find(url, A)# 记录相关推荐图片Recommend = recommend(url)print('经过检测%s类图片共有%d张' % (word, total))numPicture = int(input('输入要下载的数量'))file = input('请建立一个存储图片的文件夹,输入文件夹名称即可: ')y = os.path.exists(file)if y == 1:print('该文件已存在,请重新输入')file = input('请建立一个存储图片的文件夹,)输入文件夹名称即可: ')os.mkdir(file)else:os.mkdir(file)t = 0tmp = urlwhile t < numPicture:try:url = tmp + str(t)result = requests.get(url, timeout=10)print(url)except error.HTTPError as e:print('网络错误,请调整网络后重试')t = t + 60else:dowmloadPicture(result.text, word)t = t + 60

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

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

相关文章

CENTOS8.2下的内核启动参数cmdline更新

error: environment block too small. 删掉grubenv重新生成。 查看是什么方式启动 [rootlocalhost boot]# [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS UEFI 先改etc/default/grub GRUB_CMDLINE_LINUX"consolettyS0,115200n8 crashkernelauto ignore_…

最重要的BI测试-适用于任何BI和分析平台

为什么 BI 测试是答案 相信你的数据可视化是成功执行商业智能 (BI) 和分析项目的关键因素。我敢肯定&#xff0c;你遇到过以下情况&#xff1a;业务主管或业务用户反馈说他们的分析看起来不对&#xff0c;他们的 KPI 看起来有问题&#xff0c;或者速度太慢而无法使用。要问自己…

[Python程序打包: 使用PyInstaller制作单文件exe以及打包GUI程序详解]

文章目录 概要Python 程序打包—使用 Pyinstaller 打包 exePython程序打包—使用Pyinstaller打包GUI程序Python程序打包—使用 Pyinstaller 设置 exe 图标小结 概要 使用PyInstaller工具将Python程序打包成可执行&#xff08;EXE&#xff09;文件。将Python程序打包成EXE的好处…

处理视频的新工具:UniFab 2.0.0.4 Crack

UniFab这是一个用于处理视频的新工具&#xff0c;可以帮助您像专业人士一样获得结果&#xff0c;事实上&#xff0c;它可以确保在项目的任何设备上完美播放&#xff0c;所以&#xff0c;来认识一下 UniFab - 一款功能强大且方便的视频编辑器和转换器&#xff0c;但另一方面&…

最强模型GPT-4 Turbo来了,程序员会失业吗?

它来了&#xff0c;最强模型GPT-4Turbo!一觉醒来&#xff0c;ChatGPT完成了更新&#xff0c;上线了最强模型和开放应用商店GPTs。想从程序员角度来理性看待GPT-4 Turbo发布后对程序员行业的一些影响。 前言 在11月7日的OpenAI开发者大会上山姆奥特曼中展示了GPT-4 Turbo许多具…

矩阵论(Matrix)

​ 大纲 矩阵微积分&#xff1a;多元微积分的一种特殊表达&#xff0c;尤其是在矩阵空间上进行讨论的时候逆矩阵(inverse matrix)矩阵分解&#xff1a;特征分解&#xff08;Eigendecomposition&#xff09;&#xff0c;又称谱分解&#xff08;Spectral decomposition&#xf…

装饰者设计模式

package com.jmj.pattern.decorator;/*** 快餐类(抽象构建角色)*/ public abstract class FastFood {private float price;private String desc;public float getPrice() {return price;}public void setPrice(float price) {this.price price;}public String getDesc() {retu…

中国上市公司漂绿程度及其同构指数(多种测算方法,2012-2022年)

数据简介&#xff1a;20 世纪 90 年代开始&#xff0c;国际上关于绿色市场和绿色管理的学术文献日渐丰富&#xff0c;众多企业积极响应碳排放政策的号召&#xff0c;但其中有多少企业是实实在在的进行碳减排技术创新&#xff0c;又有多少企业打着绿色低碳行为的口号来吸引眼球、…

python+requests+pytest+allure自动化框架

1.核心库 requests request请求 openpyxl excel文件操作 loggin 日志 smtplib 发送邮件 configparser unittest.mock mock服务 2.目录结构 base utils testDatas conf testCases testReport logs 其他 2.1base base_path.py 存放绝对路径,dos命令或Jenkins执行…

100%纯血鸿蒙来了,Android程序员影响甚大

“纯血鸿蒙”来了&#xff01; 近日&#xff0c;美团、网易、今日头条、钉钉等多家互联网头部企业密集发布对鸿蒙系统相关人才的招聘信息&#xff0c;再度引爆市场对“纯血鸿蒙”的热议。 操作系统之“国货之光” 自2019年8月发布至今&#xff0c;鸿蒙系统已经更新到4.0版本…

pulseaudio是如何测试出音频延迟的

通常专业的音频设备生产厂商都有专业的设备来测试精确的音频链路延时。 那么没有专业设备怎么测试出音频延迟呢?如下图,我们可以看到pulseaudio可以测试出硬件音频延迟。 那么,他是怎么测试出硬件延迟的呢?他的理论依据是什么呢?接下来我带大伙一起探索一下。 /*占位…

github国内访问小解(windows)

git 下载安装 使用 github 前必须确保电脑上已经安装了 Git&#xff0c;可以从 Git 官方网站去下载。 官方的网站在国内访问会比较慢&#xff0c;这里可以选择国内镜像&#xff1a;https://registry.npmmirror.com/binary.html?pathgit-for-windows/ github 之旅 确认电脑已…