数据采集与融合技术第一次作业

news/2024/10/15 19:27:15

作业1
1)用requests和BeautifulSoup库方法定向爬取给定网址(http://www.shanghairanking.cn/rankings/bcur/2020 )的数据,屏幕打印爬取的大学排名信息。

import urllib.request
from bs4 import BeautifulSoup# 定义 URL
url = 'http://www.shanghairanking.cn/rankings/bcur/2020'# 发起请求并获取网页内容
response = urllib.request.urlopen(url)
html = response.read()# 解析网页内容
soup = BeautifulSoup(html, 'html.parser')# 找到排名表格
table = soup.find('table')# 提取表格中的数据
rows = table.find_all('tr')# 打印表头
print(f"{'排名':<5} {'学校名称':<20} {'省市':<10} {'学校类型':<10} {'总分':<5}")# 遍历每一行并打印数据
for row in rows[1:]:  # 跳过表头行cols = row.find_all('td')name_tag = row.find_all('span')rank = cols[0].text.strip()name = name_tag[0].text.strip()city = cols[2].text.strip()type_ = cols[3].text.strip()score = cols[4].text.strip()print(f"{rank:<5} {name:<20} {city:<10} {type_:<10} {score:<5}")

运行结果:

2)实验心得
在完成作业一的过程中,我深刻体会到了 Python 网络爬虫的强大功能。通过使用 requests 和 BeautifulSoup 库,能够轻松地从网页中提取所需的信息。
首先,requests 库使得发送 HTTP 请求变得非常简单。只需要几行代码,就可以获取到网页的内容,为后续的数据分析和处理奠定了基础。
BeautifulSoup 库则在解析 HTML 文档方面表现出色。它提供了直观的方法来定位和提取特定的元素,如表格中的数据。在这个作业中,通过找到特定的表格,并遍历其中的行和列,成功地提取了大学排名信息。
这个过程也让我更加熟悉了 HTML 结构和 CSS 选择器的使用。了解如何根据网页的结构来定位所需的信息是非常重要的技能。
此外,通过格式化输出,使得数据更加清晰易读。这也提醒了我在数据处理和展示方面要注重用户体验。
总的来说,作业一让我对网络爬虫有了更深入的理解和实践经验,为今后处理更多复杂的网页数据提取任务打下了坚实的基础。

作业2
1)用requests和re库方法设计某个商城(自已选择)商品比价定向爬虫,爬取该商城,以关键词“书包”搜索页面的数据,爬取商品名称和价格。

import re
import urllib.parse
import urllib.requestdef getHTMLText(url):  # 获取URL信息,输出内容headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0'}try:req = urllib.request.Request(url, headers=headers)data = urllib.request.urlopen(req).read().decode()return dataexcept Exception as err:return err# 正则表达式获取商品名称和商品价格:定义函数parsePage()
def parsePage(uinfo, data):plt = re.findall(r'"sku_price":"[\d.]*"', data)tlt = re.findall(r'"ad_title_text":".*?"', data)  # *?表示最小匹配for i in range(len(tlt)):price = eval(plt[i].split(':')[1])name = eval(tlt[i].split(':')[1])# 序号   价格  商品名称追加到uinfo列表uinfo.append([i + 1, price, name])return uinfo# 利用数据结构展示并输出结果:定义函数
def printGoodslist(uinfo):tplt = "{0:^5}\t{1:^10}\t{2:^20}"print(tplt.format("序号", "价格", "商品名称"))for i in uinfo:print(tplt.format(i[0], i[1], i[2]))def main():url ='https://re.jd.com/search?keyword=%E4%B9%A6%E5%8C%85&enc=utf-8'uinfo = []  # 将爬取信息放到列表中data = getHTMLText(url)parsePage(uinfo, data)printGoodslist(uinfo)if __name__ == '__main__':main()

实验结果:

2)心得体会
在进行作业二时,选择使用 requests 和 re 库来设计商品比价定向爬虫是一个有趣的挑战。
通过选择一个商城并以特定关键词进行搜索,我学会了如何模拟用户的搜索行为,并获取搜索结果页面的内容。
requests 库再次发挥了重要作用,确保能够顺利地与商城的服务器进行交互。而 re 库则在提取商品名称和价格信息时提供了灵活的正则表达式匹配功能。
在这个过程中,我需要仔细分析商城页面的 HTML 结构,确定商品名称和价格所在的位置,并设计合适的正则表达式来准确地提取这些信息。
这个作业让我意识到,不同的商城可能具有不同的页面结构和数据呈现方式,因此在进行爬虫开发时,需要根据具体情况进行调整和优化。
同时,也让我更加关注数据的准确性和完整性。在提取信息时,需要进行适当的验证和处理,以确保数据的质量。
总的来说,作业二让我深入了解了正则表达式在数据提取中的应用,以及如何针对特定的商城进行定向爬虫开发,为实际的数据分析和决策提供了有价值的信息。

作业3
1)爬取一个给定网页(https://news.fzu.edu.cn/yxfd.htm)的所有JPEG和JPG格式文件

import requests
from bs4 import BeautifulSoup
import os
import concurrent.futuresdef get_html(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36'}try:response = requests.get(url, headers=headers)response.raise_for_status()return response.textexcept requests.RequestException as e:print(f"Error fetching data from {url}: {e}")return ""def find_image_urls(html):soup = BeautifulSoup(html, 'html.parser')image_urls = []for img_tag in soup.find_all('img'):src = img_tag.get('src')if src and (src.endswith('.jpg') or src.endswith('.jpeg')):# 如果图片链接不是完整的 URL,添加页面的协议和域名构建完整 URLif not src.startswith('http'):base_url = 'https://xcb.fzu.edu.cn'src = f'{base_url}{src}'image_urls.append(src)return image_urlsdef download_image(img_url, save_folder):try:img_data = requests.get(img_url).contentimg_name = os.path.basename(img_url)save_path = os.path.join(save_folder, img_name)os.makedirs(save_folder, exist_ok=True)with open(save_path, 'wb') as handler:handler.write(img_data)print(f"Downloaded {img_name}")except Exception as e:print(f"Error downloading {img_url}: {e}")def main():target_url = 'https://news.fzu.edu.cn/yxfd.htm'html_content = get_html(target_url)if html_content:image_urls = find_image_urls(html_content)save_folder = r"D:\python\上课\数据采集实践\1\image"with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:executor.map(lambda url: download_image(url, save_folder), image_urls)if __name__ == '__main__':os.makedirs(r"D:\python\上课\数据采集实践\1\image", exist_ok=True)main()

实验结果:
下载到3张图片

2)心得体会
作业三要求爬取给定网页中的 JPEG 和 JPG 格式文件,这是一个非常实用的任务。
在这个过程中,我首先需要了解如何分析网页的结构,以确定图片文件的链接位置。通过查看网页的源代码和使用浏览器的开发者工具,可以找到图片的 URL。
然后,使用 requests 库来下载这些图片文件,并保存到指定的文件夹中。这个过程需要注意文件命名和路径的处理,以确保文件能够正确地保存。
这个作业让我认识到,网络上有大量的多媒体资源可以通过爬虫来获取和利用。同时,也需要注意遵守法律法规和网站的使用条款,确保合法地获取和使用这些资源。
此外,在处理文件下载和保存时,还需要考虑错误处理和异常情况。例如,如果文件下载失败或保存过程中出现问题,需要有相应的处理机制来保证程序的稳定性。
总的来说,作业三让我学会了如何从网页中提取特定格式的文件,并加深了对文件操作和网络爬虫的理解,为今后处理多媒体资源的任务提供了宝贵的经验。

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

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

相关文章

『模拟赛』多校A层冲刺NOIP2024模拟赛07

『模拟赛记录』多校A层冲刺NOIP2024模拟赛07Rank 一般,挂大分场。A. 限速(speed) 签。 直接跑一棵最小生成树出来,然后 dfs 一遍,如果有边权不小于 \(k\) 的就给答案加上绝对值的差,若没有则再遍历一遍所有边找到与 \(k\) 之差绝对值最小的边插进去就行,答案就是这个绝对…

数据采集第二次作业

数据采集实践第二次作业 目录点击展开/收起作业①:定向爬取7日天气预报 作业②:定向爬取股票相关信息 作业③:定向爬取中国大学2021主榜信息 总结● 码云链接 作业1 xh102202145/crawl_project作业①:定向爬取7日天气预报 1.1 实验要求 在中国气象网(http://www.weather.…

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

全链路营销|基于事件驱动的流程编排系统 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的包含逻辑。由于使用…