102302148谢文杰第一次数据采集作业

news/2025/10/20 0:58:43/文章来源:https://www.cnblogs.com/xwj777/p/19151657

第一题

核心代码与运行结果

点击查看代码
import requests
from bs4 import BeautifulSoup# 目标URL:2020年中国大学排名页面
url="http://www.shanghairanking.cn/rankings/bcur/2020"
response=requests.get(url)
response.encoding="utf-8"soup=BeautifulSoup(response.text,"html.parser")# 查找所有大学数据行:通过特定的data属性定位包含大学信息的表格行
university_rows = soup.find_all('tr', attrs={'data-v-389300f0': ''})print("排名 学校名称\t\t省市\t类型\t总分")
print("-"*50)#提取排名,名称,省市,类型,总分
for row in university_rows:rank_div=row.find("div", class_= "ranking")if rank_div:cells = row.find_all('td')# print(cells)if len(cells)>=5:rank=rank_div.get_text().strip()name_cn=cells[1].find("span", class_="name-cn")university = name_cn.get_text().strip() if name_cn else "未知"province = cells[2].get_text().strip()school_type = cells[3].get_text().strip()score_school = cells[4].get_text().strip()print(f"{rank:>2} {university:12} {province:6} {school_type:4} {score_school:4}")

屏幕截图 2025-10-19 221409

实验成功实现了网页内容获取、编码处理和数据提取等基础功能。通过分析HTML结构,发现大学数据行具有特定的data-v-389300f0属性,利用这一特征成功定位到所有大学信息行,并准确提取出排名、学校名称、省市、类型和总分等关键信息。在数据提取过程中,针对复杂的嵌套标签结构,采用了多层次的查找方法,确保信息获取的准确性。

屏幕截图 2025-10-19 231023

实验心得

本次实验通过Python的requests和BeautifulSoup库爬取软科中国大学排名网站数据,成功实现了对大学排名信息的提取,但在实践过程中也遇到了显著的技术挑战。

实验过程中遇到了动态内容加载这一关键技术瓶颈。由于目标网站采用JavaScript动态加载内容,传统的requests+BeautifulSoup组合存在明显局限,无法获取通过JS加载的分页数据,只能提取到第一页的静态内容。这种技术限制主要体现在三个方面:requests库只能获取初始HTML而无法执行JavaScript;分页内容通过AJAX请求加载,需要额外分析网络请求;无法模拟用户交互行为如点击下一页操作。这些限制导致无法获得完整的排名数据,影响了数据的全面性。可以使用Selenium等自动化包爬。

通过本次实验,我在技术层面加深了对HTML DOM结构的理解,掌握了BeautifulSoup的多种查找方法,学会了处理复杂嵌套标签结构的技巧,同时认识到静态爬虫与动态网站的技术差异。在实践层面,理解了网站反爬机制的存在意义,学会了分析网页结构定位目标数据的方法。

第二题

核心代码与运行结果

点击查看代码
import requests
from bs4 import BeautifulSoup
import re
url = 'https://search.dangdang.com/?key=%CA%E9%B0%FC&act=input'response = requests.get(url)
response.encoding = "gbk"
html = response.text# 正则提取商品名称和价格
product_pattern = r'<li[^>]*ddt-pit="\d+"[^>]*class="line\d+"[^>]*>.*?</li>'
product_matches = re.findall(product_pattern, html, re.S)
print("序号 价格\t\t\t\t\t\t\t 商品名称")
for item in product_matches:#提取商品序号ddt_pit_pattern = r'ddt-pit="(\d+)"'ddt_pit_match = re.search(ddt_pit_pattern, item)ddt_pit = ddt_pit_match.group(1) if ddt_pit_match else "未知"#提取商品文字介绍title_pattern = r'<a title="([^"]+)"'ddt_title_match = re.search(title_pattern, item)ddt_title = ddt_title_match.group(1) if ddt_title_match else "未知"#提取出商品的价格price_pattern = r'<span class="price_n">\s*&yen;\s*([\d.]+)\s*</span>'ddt_price_match = re.search(price_pattern,item)ddt_price = ddt_price_match.group(1) if ddt_price_match else "未知"print(f"{ddt_pit:>2}  {ddt_price:>6} {ddt_title:35}")

屏幕截图 2025-10-19 232012

实验心得

实验过程中遇到的主要挑战在于HTML结构的复杂性和数据格式的不一致性。在提取商品价格时,发现网页中使用的是HTML实体“&yen”;而非直接的¥符号,这要求正则表达式必须适配这种特殊编码。同时,商品标题的长度不一也给输出排版带来了困难,需要通过字符串格式化控制显示宽度。通过不断调试正则表达式模式,最终实现了数据的准确提取和整齐的表格化输出。

这次实验让我深刻认识到,在实际网络爬虫开发中,网页结构的微小变化都可能对数据提取产生重大影响。正则表达式虽然强大灵活,但也容易因网页结构变动而失效,需要谨慎使用并配合其他解析方法。未来可以考虑引入更稳定的解析方式。

第三题

核心代码和运行结果

点击查看代码
import requests  
from bs4 import BeautifulSoup  
import os  
from urllib.parse import urljoin  # 创建保存图片的文件夹,如果已存在则不会报错
os.makedirs('fzu_images', exist_ok=True)# 遍历6个页面,从第1页到第6页
for page in range(0, 6):# 构造页面URL:第1页特殊处理,其他页按规律生成url = f'https://news.fzu.edu.cn/yxfd/{page}.htm' if page >= 1 else 'https://news.fzu.edu.cn/yxfd.htm'print(f"处理页面: {url}")  # 发送GET请求获取页面内容response = requests.get(url)response.encoding = 'utf-8'  soup = BeautifulSoup(response.text, 'html.parser')  # 查找所有包含图片的div元素,class为'img slow'for img in soup.find_all('div', class_='img slow'):img_tag = img.find('img')  if img_tag and img_tag.get('src'): img_url = urljoin(url, img_tag['src'])  # 检查图片格式,只下载jpg、jpeg、png格式if any(img_url.lower().endswith(ext) for ext in ['.jpg', '.jpeg', '.png']):try:# 下载图片内容img_data = requests.get(img_url).contentfilename = os.path.basename(img_url)  filepath = os.path.join('fzu_images', filename)  # 处理重复文件名:如果文件已存在,在文件名后添加数字counter = 1original_path = filepathwhile os.path.exists(filepath):name, ext = os.path.splitext(original_path)  filepath = f"{name}_{counter}{ext}"  counter += 1# 以二进制写入模式保存图片with open(filepath, 'wb') as f:f.write(img_data)print(f"  已下载: {os.path.basename(filepath)}")  except Exception as e:print(f"  下载失败: {e}")  print("所有图片下载完成!保存在 'fzu_images' 文件夹中")  

屏幕截图 2025-10-19 233743

屏幕截图 2025-10-19 234026

实验心得

本次实验通过Python实现了对福州大学新闻网站图片的自动化批量下载,掌握了网络爬虫和文件操作的核心技术。在实验中,我运用requests库进行网页请求、BeautifulSoup解析HTML内容、os模块管理文件,构建了一套完整的图片采集系统。

关键技术包括URL智能拼接、网页内容解析、图片格式筛选和文件命名去重处理。通过循环遍历多个页面实现批量下载,urljoin函数确保相对路径正确转换,文件命名机制避免重复覆盖。实验过程中,网页编码设置、异常捕获和文件去重等细节处理让我认识到健壮爬虫需要考虑各种边界情况。

通过本次实践,我掌握了静态网页图片采集流程,理解了HTTP请求响应机制,熟悉了HTML解析和文件操作技巧,为后续复杂网络数据采集项目奠定了基础。

gitee链接 https://gitee.com/XWJ_777/data-collection

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

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

相关文章

算法第二章作业

找第 k 小的数的分治算法自然语言描述: 找第 k 小的数的分治算法,首先要选择一个基准元素,然后将数组分成两部分,一部分是小于等于基准元素的数,另一部分是大于基准元素的数。假设基准元素在划分后位于数组的第 m…

完全免费的 claude 工具,真香!

完全免费的 claude 工具,真香!刚把我这段时间用 puter 搭的一个 Claude 对话小工具上线了,免费的。 它不是那种“神乎其神”的产品,但确实帮我写方案、理思路、看代码,节省了很多来回搜索的时间。 登录即可使用,…

RaspberryPi 个人服务搭建

# RaspberryPi 个人服务搭建 > 树莓派及其他debian衍生版本服务> > 版本:Linux debian 6.12.48+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.48-1 (2025-09-20) x86_64 GNU/Linux> > 日期:2025年…

tryhackme-预安全-网络如何工作-网站如何工作-11

tryhackme-Pre Security-How The Web Works-How Websites Work 房间地址:https://tryhackme.com/room/howwebsiteswork 这是网络安全入门的基础模块的计算机科学基础知识:How Websites Work(网站如何工作),序号 0…

2025塑料托盘优质厂家推荐,力森塑业科技多元化产品满足各类需求!

2025塑料托盘优质厂家推荐,力森塑业科技多元化产品满足各类需求!随着物流仓储行业的快速发展,塑料托盘作为重要的物流工具,其市场需求日益增长。然而,当前塑料托盘领域面临着诸多技术挑战,这些问题不仅影响了产品…

嵌入式实验3串口通信--任务二USART1通信

1)STM32系统给上位机(win10)连续发送“hello windows!”,win10采用“串口助手”工具接收。如果STM32的连续发送之间不加延时语句,观察win10端是否出现接收数据丢失的现象。 1.1在STM32CubeMX中建立一个新的工程。…

[SSH] sftp 基于SSH的交互式文件传输工具

[SSH] sftp 基于SSH的交互式文件传输工具$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");目录01 背景1.1 简介1.2 sftp 与 ftp 的对比1.3 sftp 与 scp 适用场…

java.math 包详解

java.math 包详解java.math 包是 Java 提供的用于高精度数学计算的工具包,主要包含两个核心类:BigInteger 和 BigDecimal。这些类用于处理超出基本数据类型范围的数值运算。 1. BigInteger 类BigInteger 用于表示任意…

Drive Snapshot

Drive SnapshotAcronis True ImageATI老版本非常棒

Python接入A股level2千档盘口和逐笔委托

Python接入A股level2千档盘口和逐笔委托本文将以实际的代码实践为例,探讨如何通过一套集成了A股基础行情、Level-2高速行情WebSocket接口、量化交易接口与金融数据库的服务,来系统性地解决这些问题。你将看到如何用简…

20232319 2025-2026-1 《网络与系统攻防技术》实验二实验报告

一、实验内容 1.实践目标 (1)使用netcat获取主机操作Shell,cron启动某项任务(任务自定) PS:cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程 (2)使用socat获取主机操作Shell, 任务计划启动…

刷题日记—洛谷循环题单

1.数学思想在算法题中的应用: 2.回文数的判定:

学号 2025-2026-1 《网络与系统攻防技术》实验二实验报告

一、实验内容 1.实践目标 (1)使用netcat获取主机操作Shell,cron启动某项任务(任务自定) PS:cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程 (2)使用socat获取主机操作Shell, 任务计划启动…

为什么需要学习变异的算法?

对,“金标准得到的时间很长” 是一个非常现实且关键的点,尤其在临床或产品落地场景中,时间成本本身就是限制模型迭代和优化的瓶颈。✅ 补充第6点(在你这个设定下):障碍类别 具体原因 影响金标准延迟 金标准(如S…

今天搞了新的回归,不显著

今天搞了新的回归,可能被解释变量的度量存在问题,也可能是解释变量有毛病,总之回归结果跟预期的正好相反,甚至反的很显著,这也太恶心了。

shell编程学习笔记005之until循环

until循环语句各种用法探索语法: until 条件 do执行; done

shell编程学习笔记006之select循环

select循环语句各种用法探索语法: select 变量 in "列表" dolist done说明: select可以显示带编号的菜单,选择并执行不同的功能。 select是死循环,可以通过break语句终止循环,也可以使用Ctrl+D或Ctrl+C…

burpsuite抓取小程序公众号数据包-cnblog

burpsuite抓取小程序 公众号https数据包 burpsuite官网下载 https://portswigger.net/burp破解工具 通过网盘分享的文件:burp破解工具.zip 链接: https://pan.baidu.com/s/1An6ebL2LdM3VvFhJSRf4Zg?pwd=8888 提取码…

2026 NOI 做题记录(七)

推荐阅读:E、G、X、AA、AEContest Link \(\text{By DaiRuiChen007}\)A. [QOJ833] Cells Blocking (4) Problem Link 首先任意取出一条路径,上面至少有一个点被删除。 只保留同时能到达 \((1,1),(n,m)\) 的点,那么按…

关于本学期我的编码规范与数学之美第一章观后感 - C

一、规范 在阅读了大型公司公开的编码规范文章后,以下是我总结出的自己应当遵守的编码规范: 1.文件与命名规范 1)文件与命名规范 文件名、源文件后缀用 .cpp,头文件用 .h 命名用小写字母 + 下划线(蛇形命名) 2)…