数据采集与融合作业1

news/2025/10/19 18:33:27/文章来源:https://www.cnblogs.com/buonanotte/p/19151222

第一题:

核心代码及运行结果

点击查看代码
import requests
from bs4 import BeautifulSoup
import pandas as pd
import redef main():"""主函数 - 包含所有爬虫功能"""url = "http://www.shanghairanking.cn/rankings/bcur/2020"try:response = requests.get(url)response.encoding = 'utf-8'soup = BeautifulSoup(response.text, 'html.parser')# 查找并处理数据ranking_data = []table_rows = soup.find_all('tr')for i, row in enumerate(table_rows[1:], 1):  # 跳过表头try:cols = row.find_all('td')if len(cols) >= 4:text = cols[1].get_text(strip=True)match = re.search(r'([^A-Za-z]*(?:大学|学院|学校))', text)university_name = match.group(1).strip() if match else text.split()[0]# 提取其他信息rank = cols[0].get_text(strip=True)province = cols[2].get_text(strip=True)school_type = cols[3].get_text(strip=True)score = cols[4].get_text(strip=True) if len(cols) > 4 else "N/A"if rank and university_name:ranking_data.append({'排名': rank,'学校名称': university_name,'省市': province,'学校类型': school_type,'总分': score})except:continueprint(f"{'排名':<4} {'学校名称':<18} {'省市':<8} {'学校类型':<8} {'总分':<8}")print("-" * 50)for item in ranking_data:print(f"{item['排名']:<4} {item['学校名称']:<16} {item['省市']:<6} {item['学校类型']:<6} {item['总分']:<8}")except Exception as e:print(f"爬取失败: {e}")if __name__ == "__main__":main()

image

实验心得

查看网页源代码可见网页结构大体如下
屏幕截图 2025-10-19 162835

<table><tr>  <!-- 表头行 --><th>排名</th><th>学校名称</th><th>省市</th><th>学校类型</th><th>总分</th></tr><tr>  <!-- 数据行 --><td>1</td><td><div class="tooltip"><div class="link-container"><span class="name-cn">清华大学</span><span class="name-en">Tsinghua University</span></div><p class="tags">双一流/985/211</p></div></td><td>北京</td><td>综合</td><td>852.5</td></tr><!-- 更多数据行... -->
</table>

步骤分解:

  1. HTTP请求与网页获取 代码解析:
  • requests.get(url):获取整个HTML文档
  • response.encoding = 'utf-8':确保中文字符正确解码
  • BeautifulSoup():将HTML字符串转换为可查询的DOM树
  1. 表格行查找 HTML结构映射:
<table><tr>...</tr>  ← 被find_all('tr')找到<tr>...</tr>  ← 被find_all('tr')找到<tr>...</tr>  ← 被find_all('tr')找到...
</table>

find_all('tr'):查找所有<tr>标签返回一个包含所有表格行的列表包括表头行和数据行

  1. 跳过表头处理 HTML结构映射:
<tr>  <!-- 第0行:表头,被跳过 --><th>排名</th><th>学校名称</th><th>省市</th><th>学校类型</th><th>总分</th>
</tr>
<tr>  <!-- 第1行:数据行,开始处理 --><td>1</td><td>清华大学...</td><td>北京</td><td>综合</td><td>852.5</td>
</tr>
  1. 单元格提取代码解析:
  • find_all('td'):查找当前行的所有单元格
  • len(cols) >= 4:确保至少有4列数据
  • 每个cols[i]对应HTML中的第i个<td>元素
  1. 提取核心算法 正则表达式详细分析:
输入文本: "清华大学Tsinghua University双一流/985/211"
正则模式: ([^A-Za-z]*(?:大学|学院|学校))匹配过程:
1. [^A-Za-z]* 匹配 "清华" (非英文字符)
2. (?:大学|学院|学校) 匹配 "大学"
3. 捕获组() 捕获 "清华大学"
4. 忽略后面的英文和标识符
  1. 其他字段提取 HTML结构映射:
<tr><td>1</td>      ← rank = cols[0].get_text() = "1"<td>...</td>    ← (已处理)<td>北京</td>    ← province = cols[2].get_text() = "北京"<td>综合</td>    ← school_type = cols[3].get_text() = "综合"<td>852.5</td>  ← score = cols[4].get_text() = "852.5"
</tr>

第二题

核心代码及运行结果

点击查看代码
import urllib.request
from bs4 import BeautifulSoup
def main():# 当当网书包搜索页面url = "https://search.dangdang.com/?key=%CA%E9%B0%FC&category_id=10009684#J_tab"# 创建请求对象req = urllib.request.Request(url)response = urllib.request.urlopen(req, timeout=10)html = response.read().decode('gbk')soup = BeautifulSoup(html, 'lxml')# 提取商品信息names = soup.find_all('a', attrs={'class': 'pic', 'name': 'itemlist-picture'})prices = soup.find_all(name='span', class_="price_n")print(f"{'序号':<4} {'价格':<12} {'商品名称'}")print("-" * 80)# 确保名称和价格数量匹配min_count = min(len(names), len(prices))# 输出商品信息for i in range(min_count):name_text = names[i]["title"]price_text = prices[i].text.strip()print(f"{i+1:<4} {price_text:<12} {name_text}")if __name__ == "__main__":main()

image

实验心得

由于大网站反爬机制,这里选择爬取当当网,这个爬虫程序采用了"获取-解析-提取-展示"的经典四段式逻辑结构。整个程序的核心思想是模拟人类浏览网页的行为:打开当当网的书包搜索页面,找到页面上的商品信息,然后将这些信息整理成表格形式展示给用户
商品名称提取语法:
image

  • soup.find_all() - BeautifulSoup的核心方法,用于查找所有匹配的元素
  • 'a' - 目标HTML标签名(锚点标签)
  • attrs={'class': 'pic', 'name': 'itemlist-picture'} - 属性字典,指定元素必须同时具备的属性

商品价格提取语法:
image

  • name='span' - 明确指定标签名为span
  • class_="price_n" - 指定CSS类名

第三题

核心代码与运行结果

点击查看代码
import requests
from bs4 import BeautifulSoup
import os
from urllib.parse import urljoin, urlparse
import re
def main():# 目标网页URLurl = "https://news.fzu.edu.cn/yxfd.htm"download_folder = "fzu_news_images"# 获取网页内容response = requests.get(url)response.encoding = response.apparent_encoding or 'utf-8'# 解析HTMLsoup = BeautifulSoup(response.text, 'html.parser')image_urls = set()# 查找所有img标签img_tags = soup.find_all('img')for img in img_tags:src = img.get('src')if src:# 转换为绝对URLabsolute_url = urljoin(url, src)# 检查是否为图片格式if any(ext in absolute_url.lower() for ext in ['.jpg', '.jpeg', '.png']):image_urls.add(absolute_url)print(f"发现 {len(image_urls)} 个图片链接")# 下载图片success_count = 0failed_count = 0for i, image_url in enumerate(image_urls, 1):print(f"[{i}/{len(image_urls)}] {image_url}")# 下载图片img_response = requests.get(image_url, timeout=30)img_response.raise_for_status()# 生成文件名parsed_url = urlparse(image_url)original_filename = os.path.basename(parsed_url.path)# 确保文件名安全safe_filename = re.sub(r'[<>:"/\\|?*]', '_', original_filename)filepath = os.path.join(download_folder, safe_filename)# 保存图片with open(filepath, 'wb') as f:f.write(img_response.content)print(f"下载成功: {safe_filename} ({len(img_response.content)} bytes)")success_count += 1  print("-" * 50)print(f"下载完成!")print(f"总计: {len(image_urls)} 个图片")print(f"成功: {success_count} 个")print(f"失败: {failed_count} 个")print(f"保存位置: {os.path.abspath(download_folder)}")
if __name__ == "__main__":main()

屏幕截图 2025-10-19 181944

实验心得

在主函数的开始部分,程序定义了两个重要的配置参数。第一个是目标网页的URL地址,这里设置为福州大学新闻网的一个页面,用户,可以根据需要修改这个地址来爬取其他网站的图片。第二个参数是图片保存的本地文件夹名称,设置为"fzu_news_images",程序会自动创建这个文件夹来存储下载的图片文件。

接下来程序开始获取目标网页的内容。使用requests模块的get方法向指定的URL发送HTTP GET请求,服务器返回的响应包含了网页的HTML代码。为了确保中文内容能够正确显示,程序会自动检测网页的字符编码格式。如果服务器响应中包含编码信息,就使用apparent_encoding属性获取的编码,否则默认使用UTF-8编码。这一步骤对于处理包含中文内容的网页非常重要。

获取到网页内容后,程序使用BeautifulSoup库将HTML文本解析成一个可操作的文档对象。BeautifulSoup会自动分析HTML的标签结构,建立一个文档树,使得我们可以方便地查找和提取其中的各种元素。同时,程序创建了一个Python集合(set)来存储发现的图片URL地址。使用集合的好处是可以自动去除重复的URL,避免下载相同的图片文件。
屏幕截图 2025-10-19 182851
屏幕截图 2025-10-19 182900

程序从HTML的img标签中提取图片链接。程序使用BeautifulSoup的find_all方法查找网页中所有的img标签,这些标签通常包含网页中直接显示的图片。对于每个找到的img标签,程序会获取其src属性的值,这个属性包含了图片的URL地址。由于网页中的图片链接可能是相对路径(如"images/photo.jpg"),程序使用urljoin函数将这些相对路径转换为完整的绝对URL地址。然后程序会检查这个URL是否包含目标图片格式的扩展名(.jpg、.jpeg或.png),只有符合条件的URL才会被添加到图片链接集合中。

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

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

相关文章

CSP-S2023题解

[CSP-S 2023] 密码锁 容易发现,最多状态只有 \(10^5\) 种,所以直接对于每一个密码,处理出来这个密码对应的正确密码可能有哪些,然后给这些密码 \(cnt\)++ ,最后看哪些密码的 \(cnt\) 为 \(n\) 即可。 #include<…

2025年家居ERP/MES/CRM厂家推荐榜单,家居ERP系统,家居MES软件,家居CRM产品,全面解析与选购指南!

2025年家居ERP/MES/CRM厂家推荐榜单,家居ERP系统,家居MES软件,家居CRM产品,全面解析与选购指南!随着家居行业的快速发展,企业对于数字化转型的需求日益迫切。家居ERP(企业资源计划)、MES(制造执行系统)和CRM…

使用autoDL gpu云服务器训练yolo的常用操作 - 东南西北风

网站:https://www.autodl.com/ 购置服务器 上传 文件 1. Linux压缩及解压缩常用命令 1.1 zip :文件压缩(跨平台兼容)基本语法:zip [选项] [压缩文件名.zip] [要压缩的文件/目录]选项 含义-r 递归压缩目录(必须加…

软件工程第三次作业-结对项目

这个作业属于哪个课程 计科23级12班这个作业要求在哪里 作业要求这个作业的目标 训练协同项目软件开发能力,学会使用性能测试工具和实现单元测试优化程序作者:高圣凯3123004566 姚沛鸿 3123004590 GitHub 代码仓库…

运算符与自增自减

运算符与自增自减运算符与自增自减 package cperator;public class Demo01 {public static void main(String[] args) {//二元运算符//Ctrl + D :复制当前行到下一行int a = 10;int b = 20;int c = 30;int d = 40;Syst…

2025年通风天窗/排烟天窗/通风气楼厂家最新推荐榜单,屋顶通风器/顺坡气楼/10A/1型/TC5A/TC12B/屋脊通风天窗公司推荐!

2025年通风天窗/排烟天窗/通风气楼厂家最新推荐榜单,屋顶通风器/顺坡气楼/10A/1型/TC5A/TC12B/屋脊通风天窗公司推荐!随着工业和建筑业的快速发展,通风天窗、排烟天窗、通风气楼等设备在厂房、仓库、办公楼等建筑中…

Azure DevOps Server 25H2 安装手册

Azure DevOps Server 25H2 安装手册Contents1. 概述 •2. 安装手册◦下载安装包 ◦安装操作系统 ◦安装数据库SQL Server ◦安装和配置服务器 ◦验证系统1. 概述经过一年多时间的积累,微软在2025年10月9日发布了最新版…

with关键字

with 关键字 with关键字为我们提供了一种优雅的方式来处理文件操作、数据库连接等需要明确释放资源的场景 with是python中的一个关键字,用于上下文管理协议(context Mangement protocol),它简化了资源管理代码,特…

2025精密球轴承优质厂家推荐:无锡雨露精工,国产高端定制首选!

2025精密球轴承优质厂家推荐:无锡雨露精工,国产高端定制首选!随着科技的不断发展和工业制造水平的提升,精密球轴承在各个领域的应用越来越广泛。从半导体设备到加工中心,从机床主轴到电主轴,从晶圆搬运机械手臂到…

2025 年电磁流量计最新推荐榜,聚焦企业技术实力与市场口碑深度解析

在工业自动化进程加速的当下,电磁流量计作为流体测量的核心设备,广泛应用于环保、化工、市政、核电等关键领域,其性能直接影响企业生产效率与成本控制。当前市场中,电磁流量计厂家数量繁杂,部分企业缺乏核心技术支…

2025 年涡轮流量计厂家企业品牌推荐排行榜,揭秘行业前十优质品牌涡轮流量计公司推荐

引言在工业自动化快速发展的当下,涡轮流量计作为重要的流量测量设备,被广泛应用于节能、环保、市政工程、化工、核电等多个关键行业。然而当前涡轮流量计市场却面临诸多问题,市场上品牌数量众多,产品质量参差不齐,…

2025 年涡街流量计厂家企业品牌推荐排行榜,实力铸就良好口碑涡街流量计公司推荐

引言在工业自动化仪表领域,涡街流量计凭借结构简单牢固、测量精度高、应用范围广等优势,已成为众多行业流量测量的重要设备,广泛应用于节能、环保、市政工程、化工、核电等领域。然而,当前涡街流量计市场却存在诸多…

练习篇:从零开始了解网络空间安全(网导1)

学期2023-2024-1 学号20252332 《网络》第一周学习总结教材学习消化总结重点第一章:网络空间安全概述学科概念:Cybersecurity 在中国相关规定中对网络空间的描述为:互联网,通信网,计算机系统,自动化控制系统....…

2025 年超声波流量计最新推荐榜,技术实力与市场口碑深度解析!

在工业自动化快速发展的当下,超声波流量计作为关键的流量测量设备,其性能优劣直接影响企业生产效率、能源利用率及安全运营。当前市场上超声波流量计品牌繁杂,部分产品存在测量精度不足、抗复杂工况能力弱、售后响应…

2025解冻设备厂家推荐:科恩冷链低温高湿射频解冻技术领先!

2025解冻设备厂家推荐:科恩冷链低温高湿射频解冻技术领先!随着食品加工行业的快速发展,解冻设备在保障食品安全和提高生产效率方面发挥着越来越重要的作用。当前市场上的解冻设备种类繁多,包括低温高湿解冻设备、静…

完整教程:Linux基本使用(Ubuntu)

完整教程:Linux基本使用(Ubuntu)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

Azure DevOps Server 25H2 最新版本发布

Azure DevOps Server 25H2 最新版本发布Contents1. 概述2. 现代软件生命周期 - Modern Lifecycle PolicyFixed Lifecycle Policy(固定生命周期策略)Modern Lifecycle Policy(现代生命周期策略)3. 软件版本命名的变…

2025年粘度计厂家推荐排行榜,在线/旋转/振动/实验室粘度计,反应釜/管线在线粘度计公司推荐!

2025年粘度计厂家推荐排行榜:在线/旋转/振动/实验室粘度计,反应釜/管线在线粘度计公司推荐!随着工业自动化和智能制造的快速发展,粘度计作为关键的检测设备,在各个行业中发挥着越来越重要的作用。无论是在线监测、…

完整教程:基于蓝耘元生代MaaS平台DeepSeek-V3.2-Exp与V3.1-Terminus模型对比测评:性能相近,价格大幅下降

完整教程:基于蓝耘元生代MaaS平台DeepSeek-V3.2-Exp与V3.1-Terminus模型对比测评:性能相近,价格大幅下降2025-10-19 18:10 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: …

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

1.1本周学习内容总结 后门技术,杀毒软件原理,免杀技术。 1.2 问题回答 例举你能想到的一个后门进入到你系统中的可能方式? 在非官方平台下载应用 例举你知道的后门如何启动起来(win及linux)的方式? 答:Windows系统…