Python网络爬虫5-实战网页爬取

news2025/7/16 21:38:58

1.需求背景

在上一篇Python网络爬虫4-实战爬取pdf中,以松下品牌说明书为例说明了网页爬取PDF的分析流程。在实际的应用中,具体代码需要根据不同的网址情况和需求进行更改。
明确要求
此次,想要爬取苏泊尔品牌下的说明书pdf,同时我们希望每个pdf都有相应的型号说明,并将对应关系存储在excel表格中。

网站分析
苏泊尔产品说明书官网链接
这里以智能电炖锅为例
在这里插入图片描述
非常幸运,这个网站的pdf链接直接暴露在开发者模式中,没有进行封装,所以我们可以直接使用BeautifulSoup和requests直接获取data-href属性的<a>标签就可以得到pdf链接。

第二个需求,保存pdf对应的产品型号,我们看到网站每个型号是有对应的文字说明的,所以我们要获取其中的文字。

在这里插入图片描述
如图所示,点击1,然后点击文字,就可以在下方定位出文字。可以看到,文字和链接都在一个bin中,<div class="words">
所以可以先找到所有的class=words的div标签,再定位文字和链接。

第三:电炖锅只有一页,如果多页如何实现,以及如何直接爬取所有类别。
电饭煲为例,观察网站的规律
https://www.supor.com.cn/other/manualgoodscategorysearch?ctype=2443---->第一页
https://www.supor.com.cn/other/manualgoodscategorysearch/2.html?ctype=2443—>第二页
https://www.supor.com.cn/other/manualgoodscategorysearch/17.html?ctype=2443—>第十七页
for循环,页用变量代替

不同类别又该如何统一实现:
也是观察网站规律,不同类别是有对应ctype的。
ctype=2443—>电饭煲
ctype= 2441–>智能电炖锅

(小白一个,这种办法对我来说是最高效的,如果模拟用户点击,获取每一个大类如电饭煲,获取完之后,切换窗口,再去点击第二个大类电炖锅,对我来说更为复杂,出错率也更高,欢迎大家尝试此种方法,可以在评论区告诉我哦~)

2.代码具体实现

首先实现某一页pdf和文本说明的功能,为了存储所有的文字信息,定义一个类或者全局变量

class Subo():

    def __init__(self):
        self.res=[]

    def get_suboer_pdf(self,url,output_dir):

        # print(url)

        # # 发送HTTP请求获取页面内容
        response = requests.get(url)
        # 如果请求失败,则抛出HTTPError异常
        response.raise_for_status()

        # # 使用BeautifulSoup解析HTML内容
        soup = BeautifulSoup(response.text, 'html.parser')

        try:

            # 首先找到某一个类别,包括href和文字信息,class=word
            shang_pins = soup.find_all('div', {'class': 'words'})

            # 对每一个类别进行提取文字和对应的href链接
            for shang_pin in shang_pins:
                one_mes = []  # 存储信息

                # 查找class为"ft16 tits"的div元素的文本内容
                tits = shang_pin.find('div', {'class': 'ft16 tits'}).get_text(strip=True)

                # 查找class为"txts ft16"的div元素的文本内容
                txt = shang_pin.find('div', {'class': 'txts ft16'}).get_text(strip=True)
                con=tits+txt
               
                one_mes.append(con)

                # pdf在data-href。查找所有带有data-href属性的<a>标签
                file_link = shang_pin.find('a', attrs={'data-href': True})['data-href']

                one_mes.append(file_link)

                filename = con+".pdf"

                # 将文件保存到本地
                response = requests.get(file_link, stream=True)
                response.raise_for_status()

                with open(os.path.join(output_dir, filename), 'wb') as f:
                    for chunk in response.iter_content(1024):
                        f.write(chunk)

                print(f'Downloaded: {filename}')


                one_mes.append(filename)
                self.res.append(one_mes)
        except:
            pass

因为采用了上述说明的方法,所以前期信息准备比较多,需要获取你要爬取的电器类别的网址(ctype)和页数。这里采用字典进行存储,如下形式:


if __name__=="__main__":
    mapping = {
        2441: {'name': '智能电炖锅', 'page': 1},
        2442: {'name': '电压力锅', 'page': 12},
        2443: {'name': '电饭煲', 'page': 17},
       
    }
    suboer=Subo()

  
    out_path = './suboer'
    save_folder = './suboer.xlsx'
    for idx in mapping.keys():
      
        name = mapping[idx]['name']
        page = mapping[idx]['page']
        print('{}-{}-{}'.format(idx, name, page))
		
		# 不同类别分别进行存储到不同文件夹
        output_dir = os.path.join(out_path, name)
        if not os.path.exists(output_dir):
            os.makedirs(output_dir)

        for i in range(1, page+1):
            # 第一页和之后的格式不一样,这是一页
            if i==1:
                url = 'https://www.supor.com.cn/other/manualgoodscategorysearch?ctype={}'.format(idx)
                one_mes=suboer.get_suboer_pdf(url, output_dir)
                print("finish page {}".format(i))

            else:
                url = 'https://www.supor.com.cn/other/manualgoodscategorysearch/{}.html?ctype={}'.format(i, idx)
                one_mes=suboer.get_suboer_pdf(url, output_dir)
                print("finish page {}".format(i))

        print("--------------------{}结束-------------------------".format(name))

    data=suboer.res
    df = pd.DataFrame(data, columns=['电器类别', '说明书链接', '文件名称'])
    df.to_excel(save_folder, index=False, sheet_name='匹配结果')
    print("------------------保存完成------------------")

程序运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.总结

网站比较友好,直接暴露pdf链接,不需要模拟用户点击。同时也利用网址特点进行爬取,具体情况需要具体分析。学习到了提取更多信息文字,对应存储到excel中。存储链接之后,可以直接利用链接进行下载。

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

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

相关文章

学习ZYNQ——使用IP核

文章目录 [TOC](文章目录) 前言一、新建Vivado工程二、使用IP核1.加载IP2.查看IP核3.应用IP核 三、添加源文件1.led.v2.约束文件pin_led.xdc 四、综合、运行程序 前言 加载前面使用HLS生成的IP核&#xff0c;实现LED灯的闪烁&#xff0c;熟悉整套流程的步骤&#xff1a; 前一篇…

C++面向对象程序设计 - 命名空间

命名空间是ANSI C引入的可以由用户命名的作用域&#xff0c;用来处理程序中常见的同名冲突。 在C语言中定义了三个层次的作用域&#xff0c;即文件&#xff08;编译单元&#xff09;、函数和复合语句。C又引入了类作用域&#xff0c;类是出现在文件内的。在不同的作用域中可以定…

C# WPF入门学习主线篇(二十九)—— 绑定到对象和集合

C# WPF入门学习主线篇&#xff08;二十九&#xff09;—— 绑定到对象和集合 在WPF中&#xff0c;数据绑定是开发动态和交互性用户界面的核心技术。通过数据绑定&#xff0c;我们可以轻松地将UI控件与后台的数据源连接起来&#xff0c;实现数据的自动更新和显示。在本篇文章中&…

618有哪些值得入手的电子产品,个个都是心头爱!

今年的618购物节目已经开启&#xff01;你们期待的购物节就要到了&#xff0c;是不是已经跃跃欲试&#xff0c;准备开启购物模式了呢&#xff1f;别急&#xff0c;今天我就给大家带来了一份2024年618电子产品的好物清单&#xff0c;让你们购物不迷茫&#xff0c;轻松选到心仪的…

超声波清洗机对眼镜有伤害吗?四大超值不踩雷超声波清洗机安利

眼镜是现代人生活中的必备物品&#xff0c;但是很多人可能对于如何正确清洗眼镜感到困惑。传统的清洗方法可能会在清洗过程中对眼镜造成损坏&#xff0c;例如使用普通肥皂或清水清洗时容易划伤镜片。为了解决这个问题&#xff0c;家用眼镜超声波清洗机应运而生。超声波清洗机利…

逻辑斯谛回归与最大熵模型的原理实现

逻辑斯谛回归(LR)是经典的分类方法 1&#xff0e;逻辑斯谛回归模型是由以下条件概率分布表示的分类模型。逻辑斯谛回归模型可以用于二类或多类分类。 P ( Y k ∣ x ) exp ⁡ ( w k ⋅ x ) 1 ∑ k 1 K − 1 exp ⁡ ( w k ⋅ x ) , k 1 , 2 , ⋯ , K − 1 P(Yk | x)\frac{\…

RT-thread内核对象的基础应用

RT-thread的内核对象基础应用 启动流程&#xff1a; 以RT-Thread Studio为例&#xff0c;用户程序入口为位于 main.c 文件中 的main 函数。系统启动后先运行startup_stm32f103xe.s文件中的汇编代码&#xff0c;运行“bl entry”指令后跳转到components.c 文件中调用entry函数&a…

关于印发农业中央预算内投资专项管理办法的通知

国家发展改革委关于 印发农业中央预算内投资专项 管理办法的通知 发改农经规〔2024〕744号 农业农村部、海关总署、国家林草局&#xff0c;各省、自治区、直辖市及计划单列市、新疆生产建设兵团发展改革委&#xff0c;北大荒农垦集团有限公司&#xff1a; 为全面贯彻党的二十…

AI时代的程序员,复合型技术大咖该具备哪些本领与魅力?

AI时代对程序员和互联网时代对程序员的要求有不同 在AI时代的今天&#xff0c;程序员所面临的挑战已经有了翻天覆地的变化。 与互联网时代相比&#xff0c;AI时代对程序员的要求更为全面与多元化 回顾互联网时代&#xff0c;程序员主要需要掌握技术的专业知识和编程技能。他…

安卓/iOS/Linux系统影音边下边播P2P传输解决方案

在当今的数字时代&#xff0c;IPTV 影音行业正经历着快速的发展和变革&#xff0c;但影音行业的流量带宽成本一直很高&#xff0c;有没有什么办法既能保证现有的用户观看体验&#xff0c;又能很好降低流量带宽成本呢? P2P技术可能是一个很好的选择&#xff0c;它不仅仅可以提…

vue+showdown展示Markdown 文本

前言&#xff1a; vueshowdown展示Markdown 文本&#xff0c;资料整理 使用教程-vditor&#xff1a; 1、安装 npm install vditor --save 2、使用 <template><div id"vditor" name"description" ></div> </template> <scri…

Ransac(随机抽样一致性算法)多项式拟合附近的点

Ransac&#xff08;随机抽样一致性算法&#xff09;多项式拟合附近的点 RANSAC&#xff08;RANdom SAmple Consensus&#xff09;算法是一种用于拟合数学模型的迭代方法&#xff0c;尤其适用于对数据中有噪声的情况。RANSAC的核心思想是通过迭代从数据集中随机抽取一小部分样本…

计算机图形学入门11:图形管线与着色器

1.什么是图形管线 把场景中的物体经过一系列的处理&#xff0c;最后一张图像的形式在屏幕上显示出来&#xff0c;这一系列过程就是图形管线(Graphics Pipeline)&#xff0c;也叫实时渲染管线(Real-time Rendering Pipeline)。如下图所示&#xff0c;为整个渲染管线的过程。 渲染…

Python:从头创建 Asyncio (2)

引言 现在&#xff0c;asyncio 已成为 Python 社区中的热门话题&#xff0c;并且名副其实——它提供了一种非常出色的处理 I/O 密集型程序的方法&#xff01;在我探索 asyncio 的过程中&#xff0c;我起初并不太明白它的工作原理。但随着深入学习&#xff0c;我意识到 asyncio …

go interface

package mainimport "fmt"// 接口 interface func main() {c : Chinese{} //创建一个中国人实例u : American{} //创建一个美国人实例greet(c) //中国人打招呼greet(u) //美国人打招呼 }// 接收具备SayHello接口能力的变量 func greet(s SayHello) {…

sslh一键在一个端口上运行多个服务(KALI工具系列二十三)

目录 1、KALI LINUX 简介 2、sslh工具简介 3、信息收集 3.1 目标主机IP&#xff08;win&#xff09; 3.2 KALI的IP 4、操作示例 4.1 监听特定端口 4.2 配置SSH 4.3 配置apache 4.4 配置sshl 4.5 验证配置 5、总结 1、KALI LINUX 简介 Kali Linux 是一个功能强大、…

腾讯云对象存储不绑定自定义备案域名不给下载应该如何处理?

从2024年1月1日起&#xff0c;腾讯云对象存储&#xff08;COS&#xff09;将实施新政策&#xff1a;新创建的存储桶不再支持使用path-style域名&#xff08;即存储桶绝对路径&#xff09;。此外&#xff0c;使用默认域名访问的新存储桶将不再支持任意类型文件的预览&#xff0c…

夏日炎炎 水域守护:北斗守护安全防线——为生命撑起智能保护伞

随着夏季的来临&#xff0c;炎热的天气让许多人纷纷寻求水的清凉。清凉的河流与广阔的海域成为了不少人消暑降温的向往之地。然而&#xff0c;私自下河、下海的行为却暗藏着巨大的安全隐患&#xff0c;每年夏季溺水事故频发&#xff0c;给无数家庭带来不可挽回的悲痛。为有效遏…

QT绘图项目 - 汽车表盘

目录 前言: 整体代码 widget.h widget.cpp 效果演示 实现刻度文字正确排版 优化代码 达到效果 封装整理代码结构: widget.h widget.cpp 指针样式美化 优化后的指针API 效果演示 设置高速刻度为红色 优化刻度API 效果演示 速度显示优化 给内圈画上黑色 优化速度…

【java计算机专业毕设】房屋租赁系统代码源码MySQL springboot vue html maven送文档ppt

1项目功能 【java计算机专业毕设】房屋租赁系统javaweb MySQL springboot vue html maven 送报告 2项目介绍 系统功能&#xff1a; 房屋租赁系统包括管理员和用户和房东三种角色。 该系统包含多个功能模块&#xff0c;分别为管理员、用户和房东提供服务。管理员功能包括个人中…