102302136 林伟杰 数据采集与融合作业1

news/2025/10/27 20:14:56/文章来源:https://www.cnblogs.com/lwj0819/p/19170032

目录

  • 作业一
    • 实验过程及结果-1
    • 心得体会-1
  • 作业二
    • 实验过程及结果-2
    • 心得体会-2
  • 作业三
    • 实验过程及结果-3
    • 心得体会-3

作业一:

实验过程及结果-1

  • 要想爬取到网站中大学的信息,应当先查看该网站中html的结构,通过搜索框搜索<table标签,观察表结构,构建标签树

屏幕截图 2025-10-26 231229

  • 明确了标签树的结构后,就可以开始写代码了,目前我们学习了requests和BeautifulSoup库,数据获取阶段使用request方法获取到网页的html文本内容,之后使用BeautifulSoup解析HTML,由标签树可知tr为表格行,可以遍历每一行tr,找到对应的td元素,按顺序打印出来即可
  • 完整代码
点击查看代码
import requests
from bs4 import BeautifulSoup#数据获取阶段
url = "http://www.shanghairanking.cn/rankings/bcur/2020"
response = requests.get(url)
response.encoding = 'utf-8'
html = response.text
#HTML解析阶段
soup = BeautifulSoup(html, 'html.parser')
table = soup.find('table', class_='rk-table')tbody = table.find('tbody')
trs = tbody.find_all('tr')
# 对齐的表头
print("{:<4} {:<16} {:<6} {:<8} {:<8}".format("排名", "学校名称", "省市", "学校类型", "总分"))
print("-" * 50)for tr in trs:tds = tr.find_all('td')if len(tds) < 5:continuetry:rank = tds[0].text.strip()name_div = tds[1].find('div', class_='univ-name')if name_div:name = name_div.contents[0].strip()else:name = tds[1].get_text().strip().split('\n')[0]province = tds[2].text.strip()type_ = tds[3].text.strip()score = tds[4].text.strip()# 使用字符串格式化对齐print("{:<4} {:<16} {:<6} {:<8} {:<8}".format(rank, name, province, type_, score))except Exception as e:print(f"解析行时出错: {e}")continue
  • 运行结果

屏幕截图 2025-10-27 142104

心得体会-1

在编写爬取代码实践过程中,我掌握了requests库发送HTTP请求和BeautifulSoup解析HTML文档的基本方法,学会了如何分析网页结构定位目标数据。

作业二:

实验过程及结果-2

(1)数据获取阶段,与作业一不同的是,京东、淘宝这些网址往往都具有反爬虫机制,尽管当当网的检查较为宽松,也需要伪造成浏览器进行访问
(2)打开开发者工具,搜索<meta标签,得知网页的编码方式为gb2312
(3)先随便找一个商品,查看标签树结构,这里选择网页的第一个商品,得知其父级标签为li,其class属性中都包含line,因此可以通过line搜索商品
屏幕截图 2025-10-27 143731
(4)题目要求输出价格和商品名,进一步观察发现,价格和商品名的class属性值分别为price和name
(5)得知标签树的基本结构后,可以通过遍历每个商品项items,从中获取题目要求的价格与商品名。对于商品名,网站中title属性中的内容已经是纯文本,可以直接提取下来。但对于价格,其中的内容包含一些特殊符号,需要通过正则表达式过滤

屏幕截图 2025-10-27 150213

  • 完整代码
点击查看代码
import requests
from bs4 import BeautifulSoup
import redef bs4_dangdang_spider():url = "http://search.dangdang.com/?key=%CA%E9%B0%FC"headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'}try:print("正在获取当当网数据...")response = requests.get(url, headers=headers, timeout=15)response.encoding = 'gb2312'soup = BeautifulSoup(response.text, 'html.parser')products = []# 查找商品列表项items = soup.find_all('li', class_=re.compile('line'))print(f"找到商品项: {len(items)} 个")for item in items:try:# 提取商品名称name_elem = item.find('a', title=True)if not name_elem:continuename = name_elem.get('title', '').strip()if not name or '书包' not in name:continue# 提取价格price_elem = item.find('span', class_=re.compile('price'))if price_elem:price_text = price_elem.get_text()price_match = re.search(r'[\d.]+', price_text)if price_match:price = price_match.group()products.append({'name': name, 'price': price})except Exception as e:continue# 输出结果print("\n序号\t价格\t商品名")print("-" * 80)if products:for i, product in enumerate(products[:20], 1):short_name = product['name'][:50] + "..." if len(product['name']) > 50 else product['name']print(f"{i}\t{product['price']}\t{short_name}")else:print("未找到商品数据")except Exception as e:print(f"错误: {e}")# 运行
if __name__ == "__main__":bs4_dangdang_spider()
  • 运行结果

屏幕截图 2025-10-27 150733

心得体会-2

当当网的反爬机制还是比较友好的,标签树也很清晰,正则表达式比较好写

作业三:

实验过程及结果-3

(1)与第二题一样,先去网页中观察一下html的结构,得知图片信息就藏在img标签后面。由于题目只要求所有JPEG、JPG或PNG格式图片文件下载下来,故而不需要像第二题一样仔细查看属性值,只需查找所有img标签下符合要求的照片,正则表达式:r'\.(jpe?g|png)'

屏幕截图 2025-10-27 182012

(2)由于网页中的图片链接通常是相对路径,所以我们需要将基础URL和从img标签获取的src属性值组合成完整URLfull_url = urljoin(url, src)

  • 完整代码
点击查看代码
import requests
from bs4 import BeautifulSoup
import os
from urllib.parse import urljoin
import re# 请求头
url = "https://news.fzu.edu.cn/yxfd.htm"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}# 创建下载目录
if not os.path.exists("download"):os.makedirs("download")# 获取网页内容
resp = requests.get(url, headers=headers)
resp.encoding = resp.apparent_encoding 
soup = BeautifulSoup(resp.text, 'html.parser') cnt = 0
# 遍历所有图片标签
for img in soup.find_all('img'):src = img.get('src', '')  # 获取图片链接if src:full_url = urljoin(url, src)  # 拼接完整URL# 检查是否为jpg或png图片if re.search(r'\.(jpe?g|png)', full_url, re.IGNORECASE):try:img_resp = requests.get(full_url, headers=headers)if img_resp.status_code == 200:# 根据URL确定文件扩展名extension = '.jpg' if re.search(r'\.jpe?g', full_url, re.IGNORECASE) else '.png'with open(f"download/{cnt}{extension}", "wb") as f:f.write(img_resp.content)cnt += 1except:pass  print(f"下载了 {cnt} 张图片")
  • 运行结果

屏幕截图 2025-10-27 200934

屏幕截图 2025-10-27 200350

心得体会-3

一开始忽略了URL拼接的重要性,导致图片无法下载,通过添加urljoin解决了路径问题。也学会了正则表达式筛选图片格式,以及文件保存。

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

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

相关文章

TCP/IP协议概述

TCP/IP分层模型是互联网协议套件的基础,它简化了OSI模型,将网络通信过程划分为四个层次。TCP/IP模型的主要目的是提供一个实际可行的网络通信架构,它是互联网和许多其他网络的基础。TCP /IP,是一组不同层次上的多个…

极值定理

若函数 \(f\) 在 \(x = c\) 处有一个局部最大值或局部最小值,则 \(f\) 在 \(x = c\) 处不可导或者 \(f(c)=0\) 。 比如说 \(f\) 在 \(x = c\) 处是个尖角,那么肯定就不可导。 若可导,不妨令是最大值(最小值类似)则…

10.25 CSP-S 模拟赛

Contest CSP-ST1 你脑子呢? 确定的情况即选比 \(a_i\) 小的,记 \(a_i\) 的排名为 \(rank_i\),则答案为 \(\binom{rank_i - 1}{k - 1}\)。 T2 大力分讨。 无论什么情况都有一个直接走到的选项 \(\operatorname{lcm}(…

【CI130x 离在线】如何运行 curl 脚本

在各种大模型的API文档中,经常会用到 curl 工具,那么——如何运行 curl 脚本呢?在Linux平台 对于复杂的代码,建议创建脚本文件:# 创建脚本文件 nano myscript.sh然后执行以下指令 # 在文件中粘贴代码,然后保存退…

日总结 18

Hive 是基于 Hadoop 生态的大数据仓库工具,通过类 SQL 的 HQL 语法简化大规模结构化 / 半结构化数据的离线批处理,底层依赖 HDFS 存储数据,计算引擎支持 MapReduce、Tez、Spark 等;其架构包含用户接口、元数据存储…

一场比赛

题目难度 颜色 分值入门 红 100普及- 橙 150普及/提高- 黄 250普及+/提高 绿 500提高+/省选- 蓝 1500省选/NOI- 紫 3500

这才是真正的AI NAS!极空间私有云Z2Ultra评测

这才是真正的AI NAS!极空间私有云Z2Ultra评测Posted on 2025-10-27 20:02 lzhdim 阅读(0) 评论(0) 收藏 举报一、前言 在NAS以及私有云领域,可能有些老玩家只知道群晖。但实际上根据天猫及京东销售数据统计,极…

新东方第三节课名言作文

开头段:1引入名言(照抄);2概括名言主题(补充一下);3个人立场(证据)A famous and enlihtening saying goes that"Respect others,and you will be respected."This remark convers a thought-provok…

【性能优化必看】CPU耗时飙高?GC频繁停顿?一文教你快速定位!​

本文分享了Java应用性能问题的排查方法,分为CPU飙升和JVM排查两部分。CPU问题排查需从进程到线程递进分析,使用top、jstack等工具定位高负载线程和代码位置。JVM排查则涉及内存溢出、GC异常等场景,通过jstat、jmap等…

​Fedora 37 安装 libicu-71.1-2.fc37.x86_64.rpm 教程(命令行步骤)​

​Fedora 37 安装 libicu-71.1-2.fc37.x86_64.rpm 教程(命令行步骤)​​一、先确认你的系统 这个包是 ​Fedora 37、64位系统(x86_64)​​ 的,所以:你得是 ​Fedora 37​ 系统电脑是 ​64位​ 的(现在大多数都是…

十月阅读_3

“简单工具的力量” 在本章被诠释得淋漓尽致。作者以 “石头剪刀布” 的极简逻辑,隐喻编程中 “基础思维决定复杂问题解法” 的本质。我曾在一个分布式任务调度项目中,因过度依赖第三方框架的复杂配置而陷入困境;后…

学校协同云盘怎么选?2025年10大热门教育网盘推荐与对比

为满足学校在教学、科研与安全合规上的需求,选择合适的协同云盘至关重要。本文深度对比了坚果云与Zoho两款主流方案。坚果云凭借其专业的无感同步、强大的文件历史版本功能以及金融级的公安部等保三级安全认证,在效率…

从神经信号到驾驶安全:Mentalab无线脑电图系统赋能汽车人因研究与HMI优化 - 指南

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

GPU集群之间的交互

目前,分散在各地的GPU智算集群之间通常没有直接的、实时的相互调用关系来共同训练一个单一的大模型。它们之间的关系更多是独立运作、资源错配或通过更高层级的调度系统进行间接协调,而不是像单个集群内部的GPU那样紧…

Java并发编程基础:从线程管理到高并发应用实践

本篇主要是多线程的基础知识,代码示例较多,有时间的可以逐个分析,具体细节都放在代码注释中了。 1. 理解线程:多任务执行的基石 1.1 什么是线程? 在现代操作系统中,进程是资源分配的基本单位,而线程是CPU调度的最…

基于ECharts 6.0实现实时材料监控看板

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

python爬取京东评论 -

python爬取京东评论使用DrissionPage模块进行爬取,DrissionPage是一个自动化的模块,可以模拟人的操作,进行翻页等操作,比传统爬取更加方便 在使用DrissionPage之前,需要先初始化路径运行下面的代码,需要将rD:\Ch…

CF1267G Game Relics

CF1267G Game Relics有 \(n\) 个物品,你可以进行下面两种操作:花费 \(c_i\) 元购买第 \(i\) 个物品。花费 \(x\) 元抽奖,等概率随机获得一个物品 \(i\)。若你已经拥有第 \(i\) 个物品,则你本次抽奖的花费改为 \(\d…

Spring Cloud Alibaba + Dubbo

Spring Cloud Alibaba + Dubbo 在微服务世界里,服务间的调用就像小伙伴之间传纸条。你可以直接跑过去,也可以用 Dubbo——微服务界的“极速传声筒”,帮你瞬间把消息传到对方手里,还保证安全可靠。 本文将从 Dubbo …