数据采集第二次作业

news/2024/10/15 19:16:25

数据采集实践第二次作业

目录

点击展开/收起
  • 作业①:定向爬取7日天气预报
  • 作业②:定向爬取股票相关信息
  • 作业③:定向爬取中国大学2021主榜信息
  • 总结

● 码云链接 作业1 · xh102202145/crawl_project


作业①:定向爬取7日天气预报

1.1 实验要求

在中国气象网(http://www.weather.com.cn)上爬取给定城市的7日天气预报,并将数据存储到数据库中。

1.2 实验思路

  1. 使用 requests 向中国气象网发送请求,获取城市天气预报数据。
  2. 利用 BeautifulSoup 解析返回的HTML内容,提取目标天气信息。
  3. 将数据保存至SQLite数据库。

1.3 主要代码块

点击查看代码

# 爬取天气数据类
class WeatherForecast:def __init__(self):self.headers = {"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre"}self.cityCode = {"北京": "101010100", "上海": "101020100", "广州": "101280101", "深圳": "101280601"}def forecastCity(self, city):if city not in self.cityCode.keys():print(city + " code cannot be found")returnurl = "http://www.weather.com.cn/weather/" + self.cityCode[city] + ".shtml"try:req = urllib.request.Request(url, headers=self.headers)data = urllib.request.urlopen(req)data = data.read()soup = BeautifulSoup(data, "lxml")lis = soup.select("ul[class='t clearfix'] li")for li in lis:try:date = li.select('h1')[0].text if li.select('h1') else "N/A"weather = li.select('p[class="wea"]')[0].text if li.select('p[class="wea"]') else "N/A"temp_high = li.select('p[class="tem"] span')[0].text if li.select('p[class="tem"] span') else "N/A"temp_low = li.select('p[class="tem"] i')[0].text if li.select('p[class="tem"] i') else "N/A"temp = temp_high + "/" + temp_lowprint(city, date, weather, temp)self.db.insert(city, date, weather, temp)except Exception as err:print("Error parsing data:", err)except Exception as err:print("Error accessing URL:", err)def process(self, cities):self.db = WeatherDB()for city in cities:self.forecastCity(city)self.db.close()

1.4 运行结果

image

1.5 心得体会


作业②:定向爬取股票相关信息

2.1 实验要求

使用 requestsBeautifulSoup 定向爬取股票相关信息,并将数据存储在数据库中。

2.2 实验思路

  1. 使用谷歌浏览器的F12调试模式分析股票信息加载的API。
  2. 使用 requests 向API发送请求,获取股票数据。
  3. 使用 BeautifulSoup 解析网页,提取公司名称、股票代码、最新价格等信息。
  4. 将提取的数据存储至SQLite数据库。

2.3 主要代码块

点击查看代码
# 获取页面输入
keypage = input("请输入要搜索的页面:")
searchlist = list(map(int, keypage.split()))# 遍历每一页进行数据爬取
for page in searchlist:url = f'http://76.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112405166990298085778_1696666115151&pn={page}&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&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&_=1696666115152'response = requests.get(url, headers=headers)data = response.text# 提取括号中的JSON数据start = response.text.find('(')end = response.text.rfind(')')data = response.text[start + 1:end]data = json.loads(data)# 提取股票信息data = data['data']['diff']plist = ['f12', 'f14', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f15', 'f16', 'f17', 'f18', 'f10', 'f8', 'f9', 'f23']for stock in data:row = tuple(stock[field] for field in plist)cursor.execute('''INSERT INTO my_table (code, name, latest_price, change_percent, change_amount, volume, turnover, amplitude, high, low, opening_price, yesterday_close, volume_ratio, turnover_rate, pe_ratio, pb_ratio) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''', row)# 提交更改并关闭数据库连接
conn.commit()

2.4 运行结果

image

股票数据成功保存至数据库中,包含股票代码、公司名称、最新价格、涨跌幅等信息。

2.5 心得体会


作业③:定向爬取中国大学2021主榜信息

3.1 实验要求

爬取中国大学2021主榜(https://www.shanghairanking.cn/rankings/bcur/2021)
所有院校信息,并存储在数据库中。将浏览器F12调试分析的过程录制为Gif并加入博客中。

3.2 实验思路

  1. 使用F12调试模式分析网页的发包情况,查找用于加载数据的API。
  2. 使用 requests 向API发送请求,获取返回的大学排名数据。
  3. 使用 BeautifulSoupjson 解析返回的数据,提取学校名称、排名、所在省市等信息。
  4. 将数据存储到SQLite数据库,并录制调试分析的过程。

3.3 主要代码块

点击查看代码
url = "https://www.shanghairanking.cn/_nuxt/static/1728872418/rankings/bcur/2021/payload.js"resquest = requests.get(url=url)name = re.findall(',univNameCn:"(.*?)",',resquest.text)#获取学校名称
score = re.findall(',score:(.*?),',resquest.text)#获取学校总分
category = re.findall(',univCategory:(.*?),',resquest.text)#获取学校类型
province = re.findall(',province:(.*?),',resquest.text)#获取学校所在省份

3.4 运行结果

image

3.5 运行结果浏览器F12调试分析的过程

3.6 心得体会


总结

本次作业通过 requestsBeautifulSoup 实现了对7日天气预报、股票信息以及中国大学排名的爬取和存储任务。通过F12调试分析,我们能深入了解网页发包情况并高效获取数据。

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

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

相关文章

全链路营销|基于事件驱动的流程编排系统 策略中心系统

全链路营销|基于事件驱动的流程编排系统 https://mp.weixin.qq.com/s/RHXyGaGyp_CK7FJPDqS3Cg 全链路营销|基于事件驱动的流程编排系统 原创 西赞 阿里云开发者 2024年10月14日 08:30 浙江 阿里妹导读本文主要介绍了 AE 策略中心的技术方案选型与落地实战。项目背景 全链路营…

去除 iPhone 设置右上角强制升级红色数字方法

iPhone 强制用户升级在设置右上角有红色数字提示,即使关闭了自动升级也清不掉。可以用快捷指令伪造一个设置的快捷方式来替代原生设置图标打开快捷指令,点击 + 新建快捷指令选择“打开App”点击 App标签,选取“设置”然后点击当前正在创建的快捷指令顶端的 “打开App”,自定…

免费又强大!这五款报表工具你一定要试试

1. 山海鲸可视化报表 简介:山海鲸报表是一款完全免费的专业报表工具,旨在帮助企业和个人用户轻松创建、管理、分享各类数据报表。该工具提供了免费一站式数据处理和展示平台,具备灵活的定制化能力,能够满足各种行业的报表需求,不仅能够处理各式复杂报表,而且提供了非常丰…

kmp算法关于从0开始和从1开始

暴力匹配BF算法从零开始: **** kmp算法从零开始:从1开始王道上面标准代码 如何记忆? 就假设s=“abc”, t=“a”,带入进去比较下。

上海交大开源超逼真声音克隆 TTS;微软探索音生图 AI 模型丨 RTE 开发者日报

这里是 「RTE 开发者日报 」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑的个人观点,欢迎大家…

C#关于EF Core 8.0 使用 Contians 遇到的坑

最近接手一个项目二开,由于需要用到Sqlserver 的JSON_Value功能,所以升级成EF Core 8.0。但是使用FindAsIQueryable进行集合包含查找的时候报错了。查看EF view发现生成的Sql不对劲 竟然用的是OPENJSON最后查了一下国外相关文章发现是EF 8.0 改了生成SQL的包含逻辑。由于使用…

POSTMAN 单线程简易刷星脚本

1.下载postman请求json文件 https://files.cnblogs.com/files/mlocvery/cnblogs.postman_collection.json?t=1728986236&download=true2.导入postman3.替换cookie和随机发送的内容 4.运行postman runner,设置参数运行即可console.log("talk is cheap, show me you c…

Office卸载不干净,无法重新安装怎么解决?

office可以说是我们日常办公中经常使用到的办公软件,而不少用户最近再卸载旧版本安装新版本office的时候,总是提示Office卸载不干净,无法重新安装,遇到这种问题我们应该怎么解决呢?下面小编就带着大家一起具体来看看吧!Office卸载不干净,无法重新安装解决方法:方法一1.…