数据采集与融合技术实践作业一

news/2024/10/19 16:38:01

作业1:大学排名数据爬取

作业代码和图片

  • 主要代码
import urllib.request
from bs4 import BeautifulSoup
import re  # 导入正则表达式模块# 指定要爬取的URL
url = 'http://www.shanghairanking.cn/rankings/bcur/2020'# 发送请求获取网页内容
response = urllib.request.urlopen(url)
html_content = response.read().decode('utf-8')# 使用BeautifulSoup解析网页内容
soup = BeautifulSoup(html_content, 'html.parser')# 找到存放排名信息的表格(假设表格在页面中唯一或具有特定的class属性)
table = soup.find('table')# 提取表格中的所有行
rows = table.find_all('tr')# 打印表头
print(f"{'排名':<5}{'学校名称':<10}{'省市':<10}{'学校类型':<10}{'总分':<10}")# 遍历每一行,提取并打印所需信息
for row in rows[1:]:  # 跳过表头行cols = row.find_all('td')if len(cols) >= 5:  # 确保每行至少有5列数据rank = cols[0].get_text(strip=True)# 使用正则表达式只保留中文字符,去掉英文部分university_name = re.findall(r'[\u4e00-\u9fa5]+', cols[1].get_text(strip=True))[0]province_city = cols[2].get_text(strip=True)university_type = cols[3].get_text(strip=True)total_score = cols[4].get_text(strip=True)# 格式化输出print(f"{rank:<5}{university_name:<10}{province_city:<10}{university_type:<10}{total_score:<10}")
  • 运行结果

作业心得

通过此次作业,我深入理解了如何使用requests库发送HTTP请求,并使用BeautifulSoup解析HTML文档。数据提取的过程让我体会到了网络爬虫的强大与灵活性。同时,我也认识到在爬取数据时要遵循网站的规则,以避免对网站造成负担。

作业2:商城爬虫

作业代码和图片

  • 主要代码
import urllib.request
from bs4 import BeautifulSoup
import reBASE_URL = "http://search.dangdang.com/?key=%E4%B9%A6%E5%8C%85&act=input"def get_html(url):#获取指定url的HTML内容head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 SLBrowser/9.0.3.5211 SLBChan/123"}request = urllib.request.Request(url, headers=head)try:response = urllib.request.urlopen(request)return response.read().decode('gbk')except urllib.error.URLError as e:if hasattr(e, "code"):print(e.code)if hasattr(e, "reason"):print(e.reason)return Nonedef get_data_from_html(html):#从HTML内容中提取商品名称和价格soup = BeautifulSoup(html, "html.parser")names = []prices = []for items in soup.find_all('p', attrs={"class": "name", "name": "title"}):for name in items.find_all('a'):title = name['title']names.append(title)for item in soup.find_all('span', attrs={"class": "price_n"}):price = item.stringprices.append(price)return names, pricesdef print_goods_info(names, prices):#打印商品名称和价格信息print("序号\t\t\t", "价格\t\t\t", "商品名\t\t")for i, (name, price) in enumerate(zip(names, prices)):# 去除多余的空白字符name = re.sub(r'\s+', ' ', name)# 提取数字和小数点price = re.findall(r'[\d.]+', price)if price:print(f"{i + 1}\t\t\t {price[0]}\t\t\t{name}")def main():names = []prices = []for i in range(1, 3):  # 爬取1-2页的内容url = BASE_URL + "&page_index=" + str(i)html = get_html(url)if html:page_names, page_prices = get_data_from_html(html)names.extend(page_names)prices.extend(page_prices)print_goods_info(names, prices)if __name__ == "__main__":main()
  • 运行结果

作业心得

在这次作业中,我学习了如何使用re库进行正则表达式匹配,从网页中提取特定的数据。同时,我也意识到需要根据具体网页结构进行调整,灵活性是编写爬虫的关键。

作业3:爬取网页JPEG和JPG格式文件

作业代码和图片

  • 主要代码
import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin# 要爬取的URL
url = 'https://news.fzu.edu.cn/yxfd.htm'# 发送请求获取网页内容
response = requests.get(url)
html_content = response.content# 使用BeautifulSoup解析网页内容
soup = BeautifulSoup(html_content, 'html.parser')# 创建存储图片的文件夹
folder_name = 'downloaded_images'
if not os.path.exists(folder_name):os.makedirs(folder_name)# 查找所有的图片链接(JPEG 和 JPG)
img_tags = soup.find_all('img')# 遍历所有图片标签,下载JPEG和JPG格式的图片
for img in img_tags:img_url = img.get('src')# 确保img_url不为空if img_url:# 将相对链接转换为绝对链接img_url = urljoin(url, img_url)# 只下载JPEG和JPG格式的图片if img_url.lower().endswith(('.jpg', '.jpeg')):# 获取图片的名称img_name = os.path.basename(img_url)# 下载图片并保存到本地img_data = requests.get(img_url).contentimg_path = os.path.join(folder_name, img_name)with open(img_path, 'wb') as handler:handler.write(img_data)print(f"已下载图片: {img_name}")print("所有图片下载完成!")
  • 运行结果

作业心得

在这次作业中,我学会了使用Python爬取网页上的图片。通过BeautifulSoup解析网页,快速提取所有<img>标签的链接。使用urljoin将相对链接转换为绝对链接,确保下载的图片有效。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

解决driverClassName: com.mysql.cj.jdbc.Driver报红问题

为将项目从postgre库转为本地mysql数据库,需要将数据库驱动改为mysql 1.在父工程的pom中引入数据库<!-- Mysql驱动包 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</…

SpringBoot 整合 RabbitMQ

简介 一般在开发过程中: 生产者工程:application.yml 文件配置 RabbitMQ 相关信息;在生产者工程中编写配置类,用于创建交换机和队列,并进行绑定;注入 RabbitTemplate 对象,通过 RabbitTemplate 对象发送消息到交换机。消费者工程:application.yml 文件配置 RabbitMQ 相…

P3571 [POI2014] SUP-Supercomputer 题解

P3571「POI2014」SUP-Supercomputer 题解 一道 “较” 水的黑题 (可一开始苦思冥想还是不会)。 本蒟蒻的第一篇黑题题解,求赞。 题意简化 给定一棵 $n$ 个节点、根节点为 $1$ 的有根树。$q$ 次询问中每次给定一个 $k$,输出需要最少用几次操作次数 删除 完整棵树。每次操作可…

Spring IoC

一、Spring IoC的理解IoC(Inversion of Control:控制反转) 是一种设计思想,而不是一个具体的技术实现。IoC 的思想就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理。不过, IoC 并非 Spring 特有,在其他语言中也有应用。 控制反转?控制:指的是对象创建(…

修改VS的代码高亮颜色

点击工具->选项选择“字体和颜色”找到“用户成员-xx”、“用户类型-xx”,点击即可修改前景色、背景色

ArkUI-Image详解

ArkUI-Image详解 文章摘要: 给Image组件设置属性可以使图片显示更灵活,达到一些自定义的效果。以下是几个常用属性的使用示例。这时可以使用interpolation属性对图片进行插值,使图片显示得更清晰。Image组件引入本地图片路径,即可显示图片(根目录为ets文件夹)。通过rende…

强化学习算法笔记之【DDPG算法】

强化学习笔记第2篇,讲解DDPG算法。 感兴趣可以参考或者复刻。强化学习笔记之【DDPG算法】 目录强化学习笔记之【DDPG算法】前言:原论文伪代码DDPG 中的四个网络代码核心更新公式前言: 本文为强化学习笔记第二篇,第一篇讲的是Q-learning和DQN 就是因为DDPG引入了Actor-Crit…

python输出hello world

输出print("hello world")