数据采集作业二

news/2025/3/11 6:09:03/文章来源:https://www.cnblogs.com/ming7511/p/18508710

作业报告

作业①:在中国气象网给定城市集的7日天气预报,并保存在数据库

1.1 作业代码与运行结果

作业代码

点击查看代码
def get_weather_forecast(city_code):url = f'http://www.weather.com.cn/weather/{city_code}.shtml'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'}response = requests.get(url, headers=headers)response.encoding = 'utf-8'soup = BeautifulSoup(response.text, 'html.parser')forecast_data = []seven_day_forecast = soup.find('ul', class_='t clearfix')if seven_day_forecast:for li in seven_day_forecast.find_all('li'):date = li.find('h1').text.strip()weather = li.find('p', class_='wea').text.strip()temp_low = li.find('p', class_='tem').span.text.strip() if li.find('p', class_='tem').span else ''temp_high = li.find('p', class_='tem').em.text.strip() if li.find('p', class_='tem').em else ''wind = li.find('p', class_='win').i.text.strip()forecast_data.append((date, weather, temp_low, temp_high, wind))return forecast_datadef save_forecast_to_csv(city, forecast_data):with open('weather_forecast.csv', mode='a', newline='', encoding='utf-8') as file:writer = csv.writer(file)for data in forecast_data:writer.writerow([city, data[0], data[1], data[2], data[3], data[4]])

运行结果

运行结果截图
运行结果截图

1.2 作业心得

在完成作业①的过程中,我学习了如何使用Python的requests库发送HTTP请求,并结合BeautifulSoup库解析HTML内容。通过分析目标网页的结构,我掌握了如何定位并提取所需的数据。

遇到的挑战

  1. 动态加载内容:部分网站的数据是通过JavaScript动态加载的,这意味着直接使用requests获取的HTML内容中可能不包含实际的数据。为了应对这种情况,我尝试使用了更精确的选择器,并根据页面实际情况调整了解析逻辑。

  2. 反爬虫机制:目标网站可能有反爬虫措施,例如检测频繁请求或限制IP访问。为了减少被封禁的风险,我在请求头中添加了User-Agent,模拟常见浏览器的访问行为。

收获与体会

通过此次作业,我深入理解了网页爬取的基本流程,包括发送请求、解析HTML、提取数据以及处理异常情况。同时,我也意识到了实际应用中可能遇到的各种问题,如动态内容加载和反爬虫机制,并学习了相应的应对策略。


作业②:用requests和BeautifulSoup库方法定向爬取股票相关信息,并存储在数据库中。

2.1 作业代码与运行结果

作业代码

点击查看代码
def fetch_data(page_number):url = f'https://1.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112409952374347191637_1728983306168&pn={page_number}&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&dect=1&wbp2u=|0|0|0|web&fid=f3&fs=m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23,m:0+t:81+s:2048&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_={1728983306169 + page_number}'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'}try:response = requests.get(url, headers=headers)return responseexcept Exception as err:print(f"Error fetching data for page {page_number}: {type(err).__name__} - {err}")return None# 解析响应数据的函数
def parse_data(response):if response and response.status_code == 200:json_data = response.textjson_data = json_data[json_data.index('(') + 1: -2]data = json.loads(json_data)return dataelse:print(f'Failed to parse data. Status code: {response.status_code if response else "None"}')return None# 翻页爬取数据的函数
def scrape_data(page_number):response = fetch_data(page_number)return parse_data(response)# 爬取多页数据并存储到 DataFrame
def scrape_multiple_pages(max_pages=5):all_data = []  # 用于存储所有页的数据for page_number in range(1, max_pages + 1):print(f"正在爬取第 {page_number} 页数据...")data = scrape_data(page_number)if data and 'data' in data and 'diff' in data['data']:for stock in data['data']['diff']:stock_info = {'名称': stock.get('f14'),'最新价': stock.get('f2'),'涨跌幅': stock.get('f3'),'成交量(手)': stock.get('f4'),'成交额': stock.get('f5'),'振幅': stock.get('f6'),'最高价': stock.get('f7'),'最低价': stock.get('f8')}all_data.append(stock_info)else:print(f"第 {page_number} 页没有数据或请求失败")breakreturn all_data# 保存股票数据到 CSV 文件
def save_to_csv(stock_data, filename='stock_data.csv'):with open(filename, mode='w', newline='', encoding='utf-8') as file:writer = csv.DictWriter(file, fieldnames=['名称', '最新价', '涨跌幅', '成交量(手)', '成交额', '振幅', '最高价', '最低价'])writer.writeheader()for data in stock_data:writer.writerow(data)

运行结果


2.2 作业心得

遇到的挑战

  1. 复杂的页面结构:股市平台的页面结构复杂且频繁变化,需要不断调整爬虫的解析逻辑和正则表达式,以确保能够准确提取所需的数据。

收获与体会

通过此次作业,我不仅巩固了使用requestsre库进行网页数据抓取的基本技能,还学习了如何应对实际项目中常见的动态内容和反爬虫机制。此外,我也认识到在复杂的平台上进行数据抓取时,可能需要结合多种工具和方法,以实现更高效和稳定的爬虫。

这次作业让我意识到,爬虫开发不仅仅是编写代码,还需要深入理解目标网站的结构和行为,以及灵活应对各种技术挑战。这对于未来从事数据采集和分析工作具有重要的指导意义。


作业③:下载网页中的所有JPEG和JPG文件

3.1 作业代码与运行结果

F12获取api



作业代码

点击查看代码
def get_html_content(url):response = requests.get(url, headers={"User-Agent": "Mozilla/5.0"}, timeout=10)response.raise_for_status()response.encoding = response.apparent_encodingreturn response.textdef parse_university_info(html_text):soup = BeautifulSoup(html_text, "html.parser")university_list = []tbody = soup.find('tbody')if not tbody:return university_listrows = tbody.find_all('tr')for row in rows:columns = row.find_all('td')if len(columns) < 5:continuerank = columns[0].text.strip()name_tag = columns[1].find('a')name = name_tag.text.strip() if name_tag else columns[1].text.strip()labels_to_remove = ['双一流', '985工程', '211工程', '985', '211']for label in labels_to_remove:name = name.replace(label, '')name = re.sub(r'[A-Za-z]', '', name)name = re.sub(r'[^\u4e00-\u9fa5]', '', name)province = columns[2].text.strip()category = columns[3].text.strip()score = columns[4].text.strip()university_list.append([rank, name, province, category, score])return university_listdef save_to_csv(data_list, csv_path='university_rankings.csv'):with open(csv_path, 'w', newline='', encoding='utf-8') as csvfile:fieldnames = ["Rank", "Name", "Province", "Category", "Score"]writer = csv.DictWriter(csvfile, fieldnames=fieldnames)writer.writeheader()for uni in data_list:writer.writerow({"Rank": uni[0],"Name": uni[1],"Province": uni[2],"Category": uni[3],"Score": uni[4]})def main():url = "https://www.shanghairanking.cn/rankings/bcur/2021"html_content = get_html_content(url)university_data = parse_university_info(html_content)if not university_data:print("未获取到大学信息。")returnsave_to_csv(university_data)print(f"成功将数据存储到 'university_rankings.csv' 中,共 {len(university_data)} 条记录。")

运行结果



总结

通过完成这三个作业,我不仅提升了Python编程技能,尤其是在网页爬取和数据处理方面,还深入理解了实际应用中可能遇到的各种技术挑战和解决方案。这些经验将为我未来的学习和项目开发奠定坚实的基础。

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

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

相关文章

Linux多ip地址如何删除多余ip

问题场景: linux支持多个ip连接一个节点,但是ifconfig往往只列出其中一个ip,而ip命令能够显示所有ip,这可能会在某些场景造成一定问题,比如对本机有多ip不知情但又管理多客户机者,可能造成寻找困难的问题。比如:我一台俩ip机子 执行ifconfig结果如下执行ip a可以看到如果…

PHP架构师要具备哪些技能

### PHP架构师要具备哪些技能 在探讨PHP架构师必须具备的技能时,我们可以直接指出三个核心要素:深入理解PHP语言核心、掌握设计模式与软件架构原理、熟练运用数据库和缓存系统。深入理解PHP语言核心不仅仅意味着对PHP语法的熟练掌握,更重要的是对PHP内部机制、性能优化以及安…

在项目进度管理中实施价值流映射的好处

价值流映射(Value Stream Mapping, VSM)是一种工具,用于可视化和优化项目的生产流程和信息流。在项目进度管理中,实施价值流映射有着多重好处:提高流程透明度、促进团队协作、优化时间管理、降低成本、增加客户价值。其中,提高流程透明度尤为重要,它能够让团队成员明确看…

高级语言程序设计第四次个人作业(102400106刘鑫语)

2024高级语言程序设计:https://edu.cnblogs.com/campus/fzu/2024C 高级语言程序设计课程第四次个人作业:https://edu.cnblogs.com/campus/fzu/2024C/homework/13293 学号:102400106 姓名:刘鑫语 第六章 6.1 无问题 6.5 不会金字塔,搜 6.7 顺利 6.8 顺利 6.9 定义函数不熟练 6.…

VMware虚拟机安装激活win10图文教程

目录 1.下载win10 2.创建虚拟机空系统 3.虚拟机设置 4.开始安装系统 5.安装VMware Tools 6.查看系统激活状态 7.系统激活不要效法这个世界.只要心意更新而变化、叫你们察验何为 神的善良、纯全可喜悦的旨意。 -【罗马书12:2】 1.下载win10 百度win10,点击官方的。下载地址:…

12. 汇总数据

聚集函数用来汇总数据。MySQL支持一系列聚集函数,可以用多种方法使用它们以返回所需的结果。这些函数是高效设计的,它们返回结果一般比你在自己的客户机应用程序中计算要快得多。 1. 聚集函数 我们经常需要汇总数据而不用把它们实际检索出来,为此MySQL提供了专门的函数。使用…

CSPS-2024 游记

顺风局打崩了CSPS-2024 游记 Day 1 坐校车去的高中园,一开始直接去考场结果被赶去理慧高中等待了。 意外发现创新高中的墙上挂着霍尔海雅,这不是我们明日方舟的角色吗.jpg。 观察座位表发现偶数座位号全是深中的,和 zd,lls 一个考场。 偷看压缩包发现有道题叫 duel,也是押…

抖音课堂上面买的课程快过期了怎么办?手把手教你如何下载抖音课堂(学浪)上已购买的视频课程!

前言:很多同学都想知道抖音课堂(学浪)中视频课程怎么下载,但是抖音课堂上面已购买的视频课程是不提供直接下载方式的,所以下面就教大家如何用学无止下载器下载学浪和抖音课堂上面已购买的视频课程。 一、在下载器首页输入“X”,回车进入学浪下载。二、提示是否登录学浪账…

2024年10月27日 下周初交易计划

1. 橡胶 周初关注18072附近空的机会

有哪些不错的UML图绘制工具

不错的UML图绘制工具有:1. Lucidchart;2. Enterprise Architect;3. Visual Paradigm;4. Draw.io;5. Astah;6. PlantUML。Lucidchart是一款基于云的UML图绘制工具,提供了直观且易用的界面。用户可以创建各种类型的UML图,如类图、时序图、活动图等。1. Lucidchart Lucidc…

学习笔记(六):ArkUi-线性布局 (Row/Column)常用属性

一、space属性 设置排列方向上子元素的间距,使各子元素在排列方向上有等间距效果。 二、alignItems属性 设置子元素在交叉轴(排列方向的垂直方向)上的对齐方式。且在各类尺寸屏幕中,表现一致。 其中,交叉轴为垂直方向时,取值为VerticalAlign类型,水平方向取值为Horizon…

腾讯云服务器s3与s2有什么区别

腾讯云服务器S3与S2有以下区别:一、性能差异;二、用途差异;三、定价差异。性能差异主要表现在处理能力、存储容量和网络性能等方面,S3服务器采用了先进的处理器架构和更高的处理频率,能够提供更快的响应速度和更高的计算性能。一、性能差异 性能是选择云服务器时最关键的因…