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

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

作业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.hskmm.com/?act=detail&tid=39138

相关文章:

  • AI元人文构想:价值表征、价值博弈与人文技艺
  • CF1111A Superhero Transformation
  • 前缀和
  • string 库常用函数
  • VC项目引用dll文件的方法
  • XCPC英语学习day1
  • maths 库常用函数
  • sys 库常用函数
  • os 库常用函数
  • 练习篇:密码学基础
  • [AI应用开发平台] Coze:AI应用开发平台
  • 『语文随笔』孤独之旅,魔幻之境——马尔克斯传
  • npuctf_2020_easyheap----off-by-one
  • 251025B. 海啸
  • 用户上下文透传机制详解
  • 品牌故事不会写?这个AI指令可能帮你解决大问题
  • WebSocket
  • JWT令牌
  • 电梯调度编程结对项目总结
  • GuessGame两个版本的区别
  • 第二次作业--田佳吉
  • 电脑频繁卡顿?4个CMD命令揪出后台隐藏进程
  • 2025_软件工程师课程辅导
  • Graphiti:为智能体构建实时知识图谱,引领更聪明的 AI 时代
  • 《《《es相关
  • 人资新手必看,企业绩效的意义
  • 题解:P14309 【MX-S8-T2】配对
  • HuggingFace 库使用小技巧
  • 启动分布式mapreduce的过程以及prompt
  • 【ArcMap】复制选中的线并将其上移一段距离