Python爬虫之爬取网页图片

当我们想要下载网页的图片时,发现网页的图片太多了,无从下手,那我们写一个脚本来爬取呗。

这次的脚本是专门针对某个外国网站使用的,因此仅供参考思路。

在测试的过程中,我发现网站使用了发爬虫机制,具体就是JavaScript动态渲染html代码,你中间使用python抓包没有JavaScript渲染过,所以BeautiSoup就不能解析HTML里面的<img>标签中的带有完整图片链接的src属性。

当我们关闭浏览器的JavaScript,网页就拒绝显示了,因此如何绕过这个是个问题。

实话实说,我没从代码层面绕过JavaScript动态渲染,但是我们如果在python中加入这个功能的目的是什么?不就是为了找到完整的、带有<img>标签的HTML源码嘛

那我们直接用现有的呗!在哪里?

这不就得到了!然后我们把这个源码放进一个txt文件中,python读取这个文件不就行啦?

import requests
from bs4 import BeautifulSoup
import selenium
from selenium import webdriver
import time
import winsound#模拟浏览器行为,绕过简单的反爬虫机制
options = webdriver.ChromeOptions()
options.add_argument("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.6312.59 Safari/537.36")
driver = webdriver.Chrome(options=options)# 设置代理和自定义请求头,因为我爬的是外网,所以加了代理
proxies = {'http': 'http://192.168.43.244:7890','https': 'http://192.168.43.244:7890',
}#设置请求头部,这里我用burp抓包抓的头部,更加模拟真实用户请求
headers = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.6312.59 Safari/537.36",'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','Accept-Encoding': 'gzip, deflate, br','Upgrade-Insecure-Requests': '1','Sec-Fetch-Dest': 'document','Sec-Fetch-Mode': 'navigate','Sec-Fetch-Site': 'none','Sec-Fetch-User': '?1','Te': 'trailers','Connection': 'close',
}# 定义文件(图片)下载路径
download_folder = 'E:/XXX/YYY/'  # 从文件中读取HTML内容,这里的111.txt是为了让BeautifulSoup读取的
file_path = 'D:/XXX/111.txt'
with open(file_path, 'r', encoding='utf-8') as file:html_content = file.read()# 使用 BeautifulSoup 解析HTML内容
soup = BeautifulSoup(html_content, 'html.parser')# 查找所有的img标签并获取其src属性值
img_tags = soup.find_all('img')
image_links = [tag.get('src') for tag in img_tags]# 定义用于存储访问结果的列表
access_results = []# 遍历所有图片链接并尝试访问
for link in image_links:try:response = requests.get(link, headers=headers, proxies=proxies)if response.status_code == 200:access_results.append(f'Successfully accessed: {link}')#下载图片file_name = link.split('/')[-1]# 拼接保存路径save_path = download_folder + file_namewith open(save_path, 'wb') as f:f.write(response.content)print(f'Downloaded: {file_name}')else:access_results.append(f'Failed to access: {link}, Status code: {response.status_code}')except requests.exceptions.RequestException as e:access_results.append(f'Failed to access: {link}, Error: {e}')# 输出访问结果
for result in access_results:print(result)
winsound.Beep(1000, 500)  # 爬取完毕响铃提示

直接运行,可以看到下载成功了,当然在运行过程中,因为网络问题会出现下载失败的问题,可以多运行几次,进行覆盖。

虽然这算是个半自动爬虫,但是在网页有很多图片的时候,会大大提高效率,这种手动绕过JavaScript动态渲染也是初学者可以使用的思路。

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

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

相关文章

阿里云服务器优惠价格61元一年,多配置报价,来看看

2024年阿里云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网aliyunfuwuqi.com整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff0c;大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新…

AI+软件工程:10倍提效!用ChatGPT编写系统功能文档

系统功能文档是一种描述软件系统功能和操作方式的文档。它让开发团队、测试人员、项目管理者、客户和最终用户对系统行为有清晰、全面的了解。 通过ChatGPT&#xff0c;我们能让编写系统功能文档的效率提升10倍以上。 用ChatGPT生成系统功能文档 我们以线上商城系统为例&#…

jetcache 2级缓存模式实现批量清除

需求 希望能够实现清理指定对象缓存的方法&#xff0c;例如缓存了User表&#xff0c;当User表巨大时&#xff0c;通过id全量去清理不现实&#xff0c;耗费资源也巨大。因此需要能够支持清理指定本地和远程缓存的批量方法。 分析 查看jetcache生成的cache接口&#xff0c;并没…

Java设计模式 | 抽象工厂模式

抽象工厂模式 工厂方法模式中考虑的是一类产品的生产&#xff0c;如幼儿园只培养小朋友&#xff0c;鞋厂只生产鞋子。这些工厂只生产同种类产品&#xff0c;同种类产品称为同等级产品&#xff0c;即工厂方法模式只考虑生产同等级的产品&#xff0c;但是在现实生活中许多工厂都…

有什么代理IP推荐?如何分辨代理IP类型?

跨境外贸是近几年来的热门行业&#xff0c;在众多助力跨境出海的工具中&#xff0c;代理IP也是强力的一大保障。不仅可以帮助企业拓展更大的地区市场&#xff0c;更加顺畅进行市场调查&#xff0c;更重要地&#xff0c;在TikTok、Amazon、Ebay、Instagram、Etsy等等跨境平台业务…

介绍一下Redis的集群模式?

Redis有三种主要的集群模式&#xff0c;用于在分布式环境中实现高可用性和数据复制。这些集群模式分别是&#xff1a;主从复制&#xff08;Master-Slave Replication&#xff09;、哨兵模式&#xff08;Sentinel&#xff09;和Redis Cluster模式。 一、问题解析 主从模式 主从…

学点儿数据库_Day11_多表、等值连接、内连接、模糊查找

1 多表 学生表、班级表、课程表、班级课程表 关系型数据库&#xff1a; MySql、SqlServer、Oracle 相同的数据出现多次绝不是一件好事&#xff0c;这是关系数据库设计的基础。关系表的设计就是要把信息分解成多个表&#xff0c;一个数据一个表&#xff0c;各表通过某些共同的…

OpenCV模块熟悉:点云处理相关

1. 显示--VIZ 曾经基于PCL 做过不少点云相关的开发&#xff0c;采样VTK进行有点云显示。后来基于OpenCV做了不少三维重建工作&#xff0c;总是将点云保存下来&#xff0c;然后借助CloudCompare等查看结果。如果能够将VIZ编译进来&#xff0c;预计会提升开发速度。 …

86.分隔链表

给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1&#xff1a; ​ 输入&#xff1a;head [1,4,3,2,5,2], x 3 输出&…

unity学习(70)——编译游戏发生错误2

1.全屏问题其实无所谓&#xff0c;windows用tab可以切出来的。 2.现在主要问题是服务器try了以后虽然不崩溃了&#xff0c;但不再显示2个实例对象了&#xff0c;unity和exe此时都只能看到一个实例对象 2.1把之前报错位置的try-catch先注释掉 2.2 unity中此时登录666账号&…

Git工具的详细使用

一、环境说明 [rootgit ~]# getenforce Disabled [rootgit ~]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)Active: inactive (d…

Avalonia笔记2 -数据集合类控件

学习笔记&#xff1a; 1. DataGrid 笔记1中已经记录&#xff1b; 2. ItemsControl 属性&#xff1a; ItemsSource&#xff1a;数据源 ItemsControl.ItemTemplate&#xff1a;单项数据模板&#xff0c;内部使用<DataTemplate> 示例&#xff1a; <ItemsContr…

docker关闭全部运行容器命令是什么?

环境&#xff1a; docker v22.1 问题描述&#xff1a; docker关闭全部运行容器命令是什么&#xff1f; 解决方案&#xff1a; 要关闭所有正在运行的Docker容器&#xff0c;可以使用如下命令&#xff1a; docker stop $(docker ps -a -q)这条命令首先执行 docker ps -a -q…

35.HarmonyOS App(ArkUI)使用父组件@Builder装饰的方法初始化子组件@BuilderParam报错

HarmonyOS App(ArkUI)使用父组件Builder装饰的方法初始化子组件BuilderParam报错 Type void is not assignable to type () > void. <tsCheck> 去掉括号()就可以了 装饰器&#xff1a; 用于装饰类、结构、方法以及变量&#xff0c;并赋予其特殊的含义。如上述示例中En…

使用LangChain LCEL生成RAG应用、使用LangChain TruLens对抗RAG幻觉

# 导入LangChain的库 from langchain import *# 加载数据源 loader WebBaseLoader() doc loader.load("https://xxx.html")# 分割文档对象 splitter RecursiveCharacterTextSplitter(max_length512) docs splitter.split(doc)# 转换文档对象为嵌入&#xff0c;并…

[ Linux ] git工具的基本使用(仓库的构建,提交)

1.安装git yum install -y git 2.打开Gitee&#xff0c;创建你的远程仓库&#xff0c;根据提示初始化本地仓库&#xff08;这里以我的仓库为例&#xff09; 新建好仓库之后跟着网页的提示初始化便可以了 3.add、commit、push三板斧 git add . //add仓库新增&#xff08;变…

V R元宇宙平台的未来方向|V R主题馆加 盟|游戏体验馆

未来&#xff0c;VR元宇宙平台可能会呈现出以下发展趋势和可能性&#xff1a; 全面融合现实与虚拟世界&#xff1a; VR元宇宙平台将更加无缝地融合现实世界和虚拟世界&#xff0c;用户可以在虚拟环境中进行各种活动&#xff0c;与现实世界进行互动&#xff0c;并且体验到更加逼…

【Linux进阶之路】理解UDP,成为TCP。

前言 学了TCP 和UDP之后&#xff0c;感觉UDP就像是初入职场的年轻人&#xff0c;两耳不闻 “窗外事”&#xff0c;只管尽力地把自己的事情做好&#xff0c;但收获的却是不可靠&#xff0c;而TCP更像是涉世极深的"职场老油条"&#xff0c;给人的感觉就是 “城府极深&a…

【Java.mysql】——数据删改(DU) 附加数据库约束

目录 &#x1f6a9;更新(Update) &#x1f6a9;删除&#xff08;Delete&#xff09; &#x1f6a9;数据库约束 &#x1f388;约束类型 ✅NULL约束 ✅NNIQUE 唯一约束 ✅DEFAULT&#xff1a;默认值约束 ✅PRIMARY KEY&#xff1a;主键约束 ✅FOREIGN KEY&#xff1a;外键…

性价比高一点的diy台式主机怎么搭配?

怎么搭配一台性价比高一点的台式机 建议&#xff1a; 选择合适的CPU和GPU。根据实际需求选择相对较新的CPU和GPU型号&#xff0c;以确保能够运行目标应用程序和游戏。 合理选择内存和存储。根据预算选择适当的内存和存储容量。8GB或16GB内存对于一般计算和游戏使用足够了&…