当前位置: 首页 > news >正文

BeautifulSoup-cnblog

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.jsqmd.com/news/254697/

相关文章:

  • 方框标定代码
  • 揭秘TCP/IP协议栈:网络通信的核心架构
  • 揭秘TCP/IP协议栈:网络通信的核心架构
  • 捕捉瞬息万变的电信号世界:Waverunner力科610Zi示波器深度解读
  • vscode的几个版本说明
  • 存储技术全景:从基础原理到未来趋势
  • 存储技术全景:从基础原理到未来趋势
  • C++跨平台开发:挑战与解决方案
  • C++跨平台开发:挑战与解决方案
  • Java性能优化实战:从原理到技巧
  • Photoshop 图形与图像处理技术——第9章:实践训练3——图像修饰和色彩色调的调整
  • 闲置京东e卡回收新选择,让沉睡的购物卡焕发新生机 - 京顺回收
  • 5G、雷达、航天研发的“心脏”利器:是德N5182B 信号发生器全面解析
  • 不同版本的 chrome 开发者工具 CSS 属性变为斜体无法修改,如何解决?
  • Photoshop 图形与图像处理技术——第9章:实践训练4——图层和蒙版
  • 提示系统没人用?架构师教你3步打造爆款互动体验
  • Nvidia H100 算力服务器 Cuda、FabricManager、Container 安装和升级 - 教程
  • 2026年1月档案机构公司权威推荐:档案储存机构公司、档案整理机构公司、档案数字化机构公司、电子档案机构公司、整理卷宗档案机构公司、销毁档案机构公司等选择指南,智慧管理解决方案 - 海棠依旧大
  • Java基础补缺5:异常处理、常用工具类
  • 基于Spring Boot的疗养院管理系统的设计与实现(11711)
  • 基于SpringBoot的房屋交易平台的设计与实现(11712)
  • 强烈安利8个AI论文工具,继续教育学生轻松搞定论文写作!
  • 专科生必看!8个降AI率工具推荐,高效降AIGC神器
  • 基于springboot在线课程管理系统的设计与实现(11713)
  • 手把手教你9款AI神器1天生成25000字论文
  • 考虑阶梯式碳交易机制与电制氢的综合能源系统热电优化(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • springboot毕业设计成绩管理系统的设计与实现(11714)
  • 基于MATLAB的单闭环直流调速系统设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 即插即用系列(代码实践) | CVPR 2025 MONA:多尺度方向感知适配器——仅需5%参数,性能超越全量微调 (5% > 100%)
  • 基于MATLAB的IIR FIR滤波器的设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码