BeautifulSoup-cnblog

news/2026/1/16 21:20:00/文章来源:https://www.cnblogs.com/san-sheng/p/19494074

BeautifulSoup

蔬菜网

​ (完整代码再文后)

​ 首先再基础的部分,和re正则不同的是,我们要先对拿到的网页源代码进行解析。image-20260116164725356

​ 接着我们观察一下源代码,这里我们要爬的是网页中蔬菜的价格。image-20260116165230774

我们可以发现所有的价格品类等信息都在table标签下面,我们可以用beautifulsoup语句提取这个标签下所有的内容,这里我们选取class="bjtbl"作为选取条件的属性和属性值(如果别的没有重复也可以用别的)

<table cellspacing="1" cellpadding="0" width="100%" bgcolor="#f2f2e7" class="bjtbl">

image-20260116165806000

选取完之后打印看一下效果,但是我们发现第一行的报价日期、产地、类别等字样也被收集进来了,这时候我们,观察网页源代码可以发现第一行的内容也在table标签下,也被收入进来了,那我们在进行再一次筛选的时候需要剔除第一行的项目。

tr代表了一行数据,我们把每一行数据提取出来,再在循环中提取各项不同数据,代码如上。最后去除第一行废弃数据。

我们继续观察网页源代码,td代表的是一列数据,第一列存储的是报价的时间,第二列是产地,第三列是类别,第四列存储了具体的品种和价格和一些补充信息,第五列则是联系人的方式,我们按照列表的方法把数据提取并写入文件。image-20260116173533189

但是打开文件后我们发现,中间有很多[NBSP]存在,这里表示这里有空格,所以我们还要对price和produce做一个空格置换的处理。image-20260116173652717

对于提取到的第三列第四列数据,把前后非断行的空格符换成空重新写入文档中image-20260116173841090

别忘记关上文档和访问!

from bs4 import BeautifulSoup
import requests
import csvurl = "http://www.shucai123.com/price/"
header = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0"
}
f = open("蔬菜网价格.csv", "w", encoding="utf-8", newline="")
csvwriter = csv.writer(f)   # 写入csv文件
resp = requests.get(url, headers=header)page = BeautifulSoup(resp.text, "html.parser")   # 解析网页,html.parser为解析器
table = page.find_all("table", attrs={"class": "bjtbl"})
# print(table)
trs = table[0].find_all("tr")[1:]   # 去掉表头for tr in trs:tds = tr.find_all("td")date = tds[0].text.strip()produce = tds[1].text.strip()kind = tds[2].text.strip()price = tds[3].text.strip().replace('\u00a0', ' ')producer = tds[4].text.strip().replace('\u00a0', ' ')csvwriter.writerow([date, produce, kind, price])
# print(trs)
print("写入成功")
f.close()
resp.close()

摄影中国

(完整代码附在文后)

老规矩先观察源代码image-20260116180453350

我们可以发现图片和连接都被存在li中,这里也有图,但这里的图是缩略图,我们不采用。一个ul则是存储一行的信息,而所有的ul则存储在

中,我可以先提取div下所有的内容,从中直接筛选出li并取到连接,跳过ul标签。image-20260116181306064

这里因为我用的python版本原因,哪怕只读取到一个数据,也必须使用列表[0]的形式

接着我们进入列表循环,从每一个a标签的href中拿到链接,这里使用get方法image-20260116181514487

image-20260116181634881

拿到并访问下一级网址后,我们继续观察网页源代码,使用开发者工具,找到图片在源代码中的位置。发现他在img标签下,我们用属性和属性值做进一步确定,防止提取错误

image-20260116182124594

image-20260116182215835

image-20260116210201139

但是这样只读取到了第一页,那后面几页怎么办呢,我们观察后面的几页的连接

http://photo.china.com.cn/2022-01/28/content_78016858_3.htm

在url后面拼接_page来转页,详细可以看之前豆瓣的方法,用status_code去做验证,但这里我们用另一种办法,我们发现当page为1时页面不存在,接着尝试page为0神奇的事情发生了image-20260116210458788

所有的图片都出现了,那我们可以直接拼接_0然后从中一次提取所有的图片url,别忘记在一次提取结束加上sleepimage-20260116210629692

好了这下我们就获取了所有图片image-20260116210710547

import requests
from bs4 import BeautifulSoup
import time
from urllib.parse import urljoin
url = "http://photo.china.com.cn/foto/node_7185699.htm"
header = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0"
}
response = requests.get(url, headers=header)
response.encoding = "utf-8"main_page = BeautifulSoup(response.text, "html.parser")  # 解析网页
alist = main_page.find_all("div", class_="main")
alist1 = alist[0].find_all("li")for a in alist1:# 获取图片链接a_href = a.find("a")href = a_href.get("href")  # 通过get方法获取href属性的值href = href.replace(".htm", "_0.htm")child_page_response = requests.get(href)child_page_response.encoding = "utf-8"child_page = BeautifulSoup(child_page_response.text, "html.parser")img_list = child_page.find_all("img", attrs={'classdata': 'next_page'})# find_all返回的是列表ResultSetfor it in img_list:src = it.get("src")  # 获取图片的src属性值img_resp = requests.get(src)    # 下载图片img_name = src.split("/")[-1]  # 获取图片的名称with open("img/"+img_name, mode="wb")as f:f.write(img_resp.content)print(img_name, "下载完成")print("---------------------------------------------")time.sleep(1)print("over!!")
response.close()

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

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

相关文章

方框标定代码

import numpy as np import cv2 import glob# 1. 准备标定板参数 chessboard_size (7, 10) # 内角点数量 square_size 13.0 # 毫米# 2. 生成世界坐标系中的3D点 objp np.zeros((chessboard_size[0]*chessboard_size[1], 3), np.float32) objp[:, :2] np.mgrid[0:chessboa…

揭秘TCP/IP协议栈:网络通信的核心架构

TCP/IP协议栈深度解析技术文章大纲引言简要介绍TCP/IP协议栈的历史背景、重要性及其在现代网络通信中的核心作用。TCP/IP协议栈的分层结构详细说明TCP/IP的四层模型&#xff08;应用层、传输层、网络层、链路层&#xff09;及其与OSI七层模型的对比。链路层&#xff08;数据链路…

揭秘TCP/IP协议栈:网络通信的核心架构

TCP/IP协议栈深度解析技术文章大纲引言简要介绍TCP/IP协议栈的历史背景、重要性及其在现代网络通信中的核心作用。TCP/IP协议栈的分层结构详细说明TCP/IP的四层模型&#xff08;应用层、传输层、网络层、链路层&#xff09;及其与OSI七层模型的对比。链路层&#xff08;数据链路…

捕捉瞬息万变的电信号世界:Waverunner力科610Zi示波器深度解读

156/2558/3328产品概述&#xff1a;在电子工程师的实验室里&#xff0c;每一块电路板的心跳与脉动——那些高速流动、转瞬即逝的电信号——决定了产品的性能与成败。如何精准“看见”并理解这些复杂的信号&#xff0c;尤其是捕捉那些隐蔽极深、稍纵即逝的异常&#xff1f;力科&…

vscode的几个版本说明

Stable稳定版(蓝色版)、Insider内测版(绿色版)、Exploration探索版(橙色版)橙色版目前只提供给VSCode开发团队使用&#xff0c;而绿色版的核心价值在于“抢先体验前沿功能”。绿色版1.默认支持 Copilot X 全功能&#xff1b;2.终端增强&#xff1a;多面板拆分与实时预览&#x…

存储技术全景:从基础原理到未来趋势

系统存储机制深度剖析技术文章大纲存储基础概念与分类存储介质类型&#xff08;机械硬盘、固态硬盘、非易失性内存等&#xff09;存储层次结构&#xff08;寄存器、缓存、主存、外存&#xff09;存储访问方式&#xff08;随机访问、顺序访问&#xff09;物理存储机制磁盘结构&a…

存储技术全景:从基础原理到未来趋势

系统存储机制深度剖析技术文章大纲存储基础概念与分类存储介质类型&#xff08;机械硬盘、固态硬盘、非易失性内存等&#xff09;存储层次结构&#xff08;寄存器、缓存、主存、外存&#xff09;存储访问方式&#xff08;随机访问、顺序访问&#xff09;物理存储机制磁盘结构&a…

C++跨平台开发:挑战与解决方案

C跨平台开发的核心挑战平台差异性处理 硬件架构差异&#xff08;x86/ARM等&#xff09;导致的内存对齐、字节序问题 操作系统API差异&#xff08;Windows/Linux/macOS系统调用、文件路径等&#xff09; 编译器兼容性问题&#xff08;GCC/Clang/MSVC对C标准的支持程度不同&#…

C++跨平台开发:挑战与解决方案

C跨平台开发的核心挑战平台差异性处理 硬件架构差异&#xff08;x86/ARM等&#xff09;导致的内存对齐、字节序问题 操作系统API差异&#xff08;Windows/Linux/macOS系统调用、文件路径等&#xff09; 编译器兼容性问题&#xff08;GCC/Clang/MSVC对C标准的支持程度不同&#…

Java性能优化实战:从原理到技巧

Java性能优化实战技术文章大纲性能优化的基础概念性能优化的定义与重要性性能指标&#xff1a;吞吐量、延迟、资源利用率常见性能瓶颈&#xff1a;CPU、内存、I/O、网络JVM层面的优化垃圾回收器选择与调优&#xff08;G1、ZGC、Shenandoah&#xff09;堆内存与元空间参数配置&a…

Photoshop 图形与图像处理技术——第9章:实践训练3——图像修饰和色彩色调的调整

目录 零、常用快捷键操作 一、使用“污点修复工具” &#xff08;1&#xff09;素材与效果图 &#xff08;2&#xff09;操作步骤 二、使用“修复画笔”工具 &#xff08;1&#xff09;素材与效果图 &#xff08;2&#xff09;操作步骤 三、使用“修补”工具 &#xf…

闲置京东e卡回收新选择,让沉睡的购物卡焕发新生机 - 京顺回收

李女士在整理抽屉时意外发现几张未拆封的京东e卡,面值加起来竟有两千元。她望着这些卡券苦笑:"现在购物都习惯用手机支付,这些卡放着也是浪费。"这个场景或许正发生在无数家庭中——随着移动支付普及,曾…

5G、雷达、航天研发的“心脏”利器:是德N5182B 信号发生器全面解析

156/2558/3328产品概述&#xff1a;在无线通信、雷达系统和航空航天等领域&#xff0c;研发与测试人员每天都在与无形的射频信号打交道。如何生成一个“纯净”且“听话”的信号&#xff0c;来验证设备在真实世界复杂电磁环境中的性能&#xff1f;这离不开一台核心仪器——射频信…

不同版本的 chrome 开发者工具 CSS 属性变为斜体无法修改,如何解决?

如上操作&#xff0c;取消"CSS源代码映射"&#xff0c;就可以把CSS斜体属性变为正常可修改属性

Photoshop 图形与图像处理技术——第9章:实践训练4——图层和蒙版

目录 一、绘制小狗 &#xff08;1&#xff09;素材 &#xff08;2&#xff09;效果图 &#xff08;3&#xff09;步骤教程 二、实践1——将老人图层移至海滩图层 &#xff08;1&#xff09;素材 &#xff08;2&#xff09;效果图 &#xff08;3&#xff09;步骤教程 三…

提示系统没人用?架构师教你3步打造爆款互动体验

提示系统没人用&#xff1f;架构师教你3步打造爆款互动体验 关键词 提示系统设计 | 用户互动体验 | 场景化引导 | 个性化感知 | 反馈闭环 | 行为经济学 | 数据驱动优化 摘要 你是否遇到过这样的场景&#xff1a;精心设计的AI提示框弹出来&#xff0c;用户却直接关掉&#x…

Nvidia H100 算力服务器 Cuda、FabricManager、Container 安装和升级 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2026年1月档案机构公司权威推荐:档案储存机构公司、档案整理机构公司、档案数字化机构公司、电子档案机构公司、整理卷宗档案机构公司、销毁档案机构公司等选择指南,智慧管理解决方案 - 海棠依旧大

广州创科绿农数字信息技术有限公司深耕数字信息技术领域,聚焦档案管理数字化升级需求,打造“创科档案”核心业务板块,以技术创新为支撑,构建适配企业全场景的档案管理体系,助力各类组织打破传统档案管理瓶颈,实现…

Java基础补缺5:异常处理、常用工具类

Java基础补缺5:异常处理、常用工具类1)Java异常处理全面解析 Error 的出现,意味着程序出现了严重的问题,而这些问题不应该再交给 Java 的异常处理机制来处理,程序应该直接崩溃掉,比如说 OutOfMemoryError,内存溢…

基于Spring Boot的疗养院管理系统的设计与实现(11711)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告&#xff09;远程调试控屏包运行 三、技术介绍 Java…