102302145 黄加鸿 数据采集与融合技术作业1

news/2025/10/26 3:23:23/文章来源:https://www.cnblogs.com/jh2680513769/p/19166185

作业1


目录
  • 作业1
    • 作业①
      • 1)代码与结果
      • 2)心得体会
    • 作业②
      • 1)代码与结果
      • 2)心得体会
    • 作业③
      • 1)代码与结果
      • 2)心得体会

gitee仓库

· https://gitee.com/jh2680513769/2025_crawler_project


作业①

1)代码与结果

首先打开给定网页 2020中国大学排名 ,F12查看HTML元素。通过查找,发现信息都存放在class属性值为rk-table的<table>元素里。在此基础上编写程序逐一提取表格行及有效信息,最后输出排名信息。

网页信息

univers

核心代码

import requests
from bs4 import BeautifulSoup
#访问网页、获取网页标签
url = "http://www.shanghairanking.cn/rankings/bcur/2020"
resp = requests.get(url)
resp.encoding='utf-8'
html = resp.text
print(f"{'排名':^8}{'学校名称':^12}{'省市':^8}{'学校类型':^8}{'总分':^10}")
#解析网页
soup = BeautifulSoup(html, 'html.parser')
#查找表格行元素
table = soup.find('table', {'class':'rk-table'})
datas = []
rows = table.find('tbody').find_all('tr')
#析取有效信息
for row in rows:cells = row.find_all('td')rank = cells[0].get_text().strip()name = cells[1].find('span').get_text().strip()province = cells[2].get_text().strip()school_type = cells[3].get_text().strip()score = cells[4].get_text().strip()print(f"{rank:^8}{name:^12}{province:^8}{school_type:^8}{score:^10}")

运行结果

task1

2)心得体会

用BeautifulSoup库解析网页可以直接提取所需元素,个人觉得比使用re库找元素更高效。原本想试着分页爬取,让大模型分析之后,发现这个网页分页机制使用了Ant Design的ant-pagination类,可以用Selenium来应对,因为还没学习这部分内容,就没有继续探究了。

作业②

1)代码与结果

这个任务首先找了一个小商城网页搜索关键词“书包”- MoonRock梦乐官方商城 。和上题步骤类似,先在网页的HTML中定位到各个商品的价格和名称信息,剩下任务主要是编写正则表达式。

网页信息

bags

核心代码

import requests
import re
#访问网页获取网页标签
url = 'https://moonrockbags.cn/search.php?encode=YToyOntzOjg6ImtleXdvcmRzIjtzOjY6IuS5puWMhSI7czoxODoic2VhcmNoX2VuY29kZV90aW1lIjtpOjE3NjEyNzA3NjM7fQ=='
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 SLBrowser/9.0.6.8151 SLBChan/111 SLBVPV/64-bit'
}
resp = requests.get(url, headers=headers)
resp.encoding = 'utf-8'
html = resp.text
#正则表达式析取网页信息
items = re.findall(r'<li id="li_\d{4}" class="(item|item last)">(.*?)</li>', html, re.S)
print(f"序号\t{'价格':6}\t商品名")
for i in range(len(items)):name = re.findall(r'<div class="item-name">.*?<a href=".*" target="_blank" title="([^"]*)"', items[i][1], re.S)[0]price = re.findall(r'<em class="sale-price main-color"[^>]*>(.*?)</em>', items[i][1], re.S)[0]print(f"{i+1}\t{price:6}\t{name}")

运行结果

task2

2)心得体会

相比于使用bs4库,我认为用re库析取信息是最直接的,但缺点是正则表达式编写比较麻烦容易出错,写代码过程中要经常检查提取的信息是否有误或多余。然后也是尝试分页爬取,依旧动态分页,凭己浅薄之力暂时无法解决,等学完后面知识再来试试吧。

作业③

1)代码与结果

任务目标是爬取 福州大学新闻网-影像福大 的所有JPEG、JPG、PNG格式文件并保存在同一文件夹下。没有规定特定使用的库,我这里就优先考虑用BeautifulSoup了,毕竟更容易上手,而且可以直接找到<img>元素的特定属性src。没用re库可能是为了节约时间。

网页信息

福大新闻网页

核心代码

import requests
from bs4 import BeautifulSoup
import os
from urllib.parse import urljoin   #处理url拼接
urls = ['https://news.fzu.edu.cn/yxfd.htm', 'https://news.fzu.edu.cn/yxfd/5.htm', 'https://news.fzu.edu.cn/yxfd/4.htm','https://news.fzu.edu.cn/yxfd/3.htm', 'https://news.fzu.edu.cn/yxfd/2.htm', 'https://news.fzu.edu.cn/yxfd/1.htm'
]
img_urls = []
for url in urls:#发送请求resp = requests.get(url)resp.encoding = 'utf-8'html = resp.text#解析网页soup = BeautifulSoup(html, 'html.parser')for img in soup.find_all('img'):src = img.get('src')if src.lower().endswith(('.jpg', '.png', '.jpeg')):#提取图片属性,拼接urlfull_url = urljoin(url, src)img_urls.append(full_url)
#去掉重复的图片
img_urls = list(set(img_urls))
#创建文件夹,下载保存图片文件
folder_name = "download_images"
if not os.path.exists(folder_name):os.makedirs(folder_name)
for img_url in img_urls:try:img_resp = requests.get(img_url)if img_resp.status_code == 200:img_name = os.path.basename(img_url)#处理文件名非法字符if '?' in img_name:img_name = img_name.split('?')[0]filepath = os.path.join(folder_name, img_name)with open(filepath, 'wb') as f:f.write(img_resp.content)print(f"{img_name}下载成功")except Exception as e:print(e)

运行结果

task3

imgs

2)心得体会

前面对网页的访问、解析、查找信息等步骤基本不变,调用urljoin处理url拼接。另外,关注到分页设计都是固定的url(静态网页),于是用列表设计爬取所有的网页图片。下载图片时反复报错,最后发现是由于直接从url中提取图片名所致,还需进一步处理非法字符才能作为文件名顺利下载保存在文件夹中。

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

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

相关文章

AI元人文构想:价值表征、价值博弈与人文技艺

AI元人文构想:价值表征、价值博弈与人文技艺 笔名:岐金兰 日期:2025年10月26日 摘要 本文提出“AI元人文”构想,旨在为人工智能时代的人类价值困境提供创新解决方案。该框架通过将抽象价值降解为可计算的价值原语与…

git 从远程仓库中拉取代码到本地,本地修改后提交到远程仓库

git 从远程仓库中拉取代码到本地,本地修改后提交到远程仓库2025-10-26 02:25 flyfish163 阅读(0) 评论(0) 收藏 举报将GitHub同步到本地 在软件开发过程中,将GitHub上的项目同步到本地是一个常见的操作。通过同步…

CF1111A Superhero Transformation

CF1111A Superhero Transformation题目描述 我们都知道超级英雄可以变身为某些其他超级英雄。但并不是所有超级英雄都能变身为任意其他超级英雄。一个名字为 \(s\) 的超级英雄可以变身为另一个名字为 \(t\) 的超级英雄…

[SHELL] 个人BASH配置与美化

[SHELL] 个人BASH配置与美化$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");给自己准备的一份bash配置文档,附带一些初始化命令 # ls alias ll=ls -lhF ali…

python数据分析方向

python数据分析方向描述性统计分析:包括计算数据的均值、中位数、标准差、最小值、最大值等,这些指标可以帮助你了解数据的整体分布和特征。可以使用data.describe()获取数据集的基本信息 data.describe():这个函数返…

string 库常用函数

在Python中,string模块提供了一系列与字符串操作相关的常量和工具函数,主要用于处理ASCII字符集、格式化模板等场景。以下是核心内容的分类说明,并附代码示例: 1. 常用字符串常量(直接访问)属性名 描述 示例值as…

VC项目引用dll文件的方法

假设dll文件所在的目录是E:\MyProject\MyLib\有4种方法: 1.把dll文件目录设置到环境变量。 例如,在path的末尾加入E:\MyProject\MyLib\ 缺点:如果项目文件复制到其它电脑,要重新配置。2.把dll文件复制到C:\Windows…

maths 库常用函数

在Python中,math库是一个内置的标准库,提供了许多执行复杂数学运算的函数,涵盖基础数值处理、数论与组合计算、幂与对数运算、三角函数与角度转换等多个方面。以下是math库中一些常用函数的分类及说明: 一、基础数…

XCPC英语学习day1

2024ICPC南京 A. Hey, Have You Seen My Kangaroo? 给定n*m网格,一些格子有障碍,其他格子空着并存在一只袋鼠。四连通,袋鼠可以移动到无障碍相邻格。 可以按四方向移动,所有袋鼠同时移动,非法则不动。 给定一个移…

sys 库常用函数

sys 库是 Python 标准库中与解释器交互的核心模块,提供了访问解释器变量、控制程序流程、管理环境配置等功能。以下是其常用函数及变量的分类说明和典型应用场景: 一、命令行参数与程序控制sys.argv功能:获取命令行…

os 库常用函数

os 库是 Python 的标准库,提供了与操作系统进行交互的功能,包括文件和目录操作、环境变量管理、进程控制等。以下是 os 库中一些常用的函数及其分类介绍: 一、文件和目录操作os.getcwd() 获取当前工作目录,返回一个…

[TOOL] [系统监控] pidstat: 系统进程状态监测工具

[TOOL] [系统监控] pidstat: 系统进程状态监测工具$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");DeepSeek生成(2025年10月26日00:45:02)目录1. 什么是 p…

[网络] [TOOL] iftop: 网络流量监控工具学习指南

[网络] [TOOL] iftop: 网络流量监控工具学习指南$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");ChatGPT生成(2025年10月26日00:34:39)目录iftop 网络流量…

练习篇:密码学基础

学期2023-2024-1 学号20252332 《网络》第二周自学总结“密码学基础”1.简单密码闲谈 2.密码学部分相关数学基础了解 3.国产密钥基本概念掌握 4.实验简单密码闲谈 0.历史渊源,从原始天性狩猎,到古代岩画信息记录,再…

[AI应用开发平台] Coze:AI应用开发平台

1 序作为深耕AI应用开发平台、未来大模型架构与智能体系统的研究者,本文有必要将深入剖析字节跳动旗下 Coze平台的 space.coze.cn(扣子空间)、coze.cn(扣子开发平台)、Coze 罗盘、Coze-Studio(开源项目)的技术差…

[网络] [TOOL] nload: Linux下的轻量网络监控工具

[网络] [TOOL] nload: Linux下的轻量网络监控工具$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");ChatGPT生成(2025年10月26日00:31:48)目录nload 网络带宽…

『语文随笔』孤独之旅,魔幻之境——马尔克斯传

ai 和 我 的合作获得了语文老师的认可。如果说,文学的沃土中也有独特的经纬,那么加西亚马尔克斯所缔造的“马孔多”无疑是一片辽阔而永恒的国度。这位身于哥伦比亚的文学巨匠,以其独有的奇丽想象,永恒的温情,为我…

npuctf_2020_easyheap----off-by-one

Off-by-One 漏洞分析与利用 概述 在刷 BUU 题目时遇到了两道 off-by-one 题目,这里记录一下学习过程。off-by-one 漏洞主要分为两种情况: off-by-one:单字节溢出,且该字节可控 off-by-null:单字节溢出,但只能溢出…

[网络] [TOOL] 为什么要使用ss工具替代netstat?

[网络] [TOOL] 为什么要使用ss工具替代netstat?$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");ChatGPT生成(2025年10月26日00:19:50)🧠 为什么要使用 …

HarfBuzz概览

HarfBuzz概览**1)什么是HarfBuzz****2)HarfBuzz名称来源****3)为什么需要HarfBuzz****4)HarfBuzz能做什么****5)HarfBuzz不能做什么****6)哪些平台在使用HarfBuzz**本文概述 本文主要介绍: 1)什么是HarfBuzz 2…