数据采集第一次作业

news/2024/10/21 18:54:33

作业①:

要求:用requests和BeautifulSoup库方法定向爬取给定网址(http://www.shanghairanking.cn/rankings/bcur/2020)的数据,屏幕打印爬取的大学排名信息。
实现关键代码:

点击查看代码
response = urllib.request.urlopen(url)
html = response.read()# 使用BeautifulSoup解析网页
soup = BeautifulSoup(html, 'html.parser')# 找到包含大学排名的表格
table = soup.find('table', {'class': 'rk-table'})# 打印表头
print(f"{'排名':<6} {'学校名称':<20} {'省市':<10} {'学校类型':<10} {'总分':<6}")# 遍历表格中的每一行
for row in table.find('tbody').find_all('tr'):cols = row.find_all('td')# 提取每列数据rank = cols[0].get_text().strip()        # 排名name = cols[1].get_text().strip()        # 学校名称province = cols[2].get_text().strip()    # 省市category = cols[3].get_text().strip()    # 学校类型score = cols[4].get_text().strip()       # 总分# 打印排名信息print(f"{rank:<6} {name:<20} {province:<10} {category:<10} {score:<6}")

完成图片:

心得:

这个任务增强了我对网页爬虫基本流程的理解,也让我意识到网络数据的结构化与清理是数据分析中非常重要的一步。

作业②:

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

点击查看代码
def getHTMLText(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)with urllib.request.urlopen(req) as response:data = response.read().decode()return dataexcept Exception as err:print(f"Error fetching data from {url}: {err}")return ""def parsePage(uinfo, data):plt = re.findall(r'"sku_price":"([\d.]+)"', data)  # 商品价格tlt = re.findall(r'"ad_title_text":"(.*?)"', data)  # 商品名称img_urls = re.findall(r'"image_url":"(.*?)"', data)  # 商品图片URLbase_url = "https://img1.360buyimg.com/n6/"  # 基础 URLmin_length = min(len(plt), len(tlt), len(img_urls))for i in range(min_length):price = plt[i].replace('"', '')  # 去掉引号name = tlt[i].strip('"')  # 去掉引号img_url = img_urls[i].replace('"', '')  # 去掉引号uinfo.append([len(uinfo) + 1, price, name, img_url])  # 添加信息到uinfo列表return uinfodef downloadImage(img_url, save_path):try:if img_url and img_url != '无图片':urllib.request.urlretrieve(img_url, save_path)print(f"Downloaded image to {save_path}")else:print(f"No image found for URL: {img_url}")except Exception as e:print(f"Error downloading {img_url}: {e}")def printGoodslist(uinfo):tplt = "{0:^5}\t{1:^10}\t{2:^20}"print(tplt.format("序号", "价格", "商品名称"))for item in uinfo:print(tplt.format(item[0], item[1], item[2]))downloadImage(item[3], os.path.join("书包", f"{item[0]}.jpg"))  # Download image with index as filenamedef main():base_url = 'https://re.jd.com/search?keyword=%E4%B9%A6%E5%8C%85&enc=utf-8&page='uinfo = []# 循环爬取3-4页for page in range(3, 5):url = f"{base_url}{page}"data = getHTMLText(url)if data:parsePage(uinfo, data)printGoodslist(uinfo)

完成结果:

完成心得:

通过使用正则表达式提取商品名称和价格,让我更熟悉了如何使用 re 库进行模式匹配。这个任务让我对电商网站的爬虫策略有了更深入的理解,同时也增强了我对数据抓取中可能遇到的技术挑战的应对能力。

作业③:

要求:爬取一个给定网页( https://news.fzu.edu.cn/yxfd.htm)或者自选网页的所有JPEG和JPG格式文件
完成代码:

点击查看代码
def download_image(img_url):global image_countwith lock:if image_count >= max_images:return  # 超过限制,直接返回# 获取图片的文件名parsed_url = urllib.parse.urlparse(img_url)file_name = os.path.join(output_folder, os.path.basename(parsed_url.path))# 检查图片是否已经下载if img_url in downloaded_images:logging.info(f'图片已存在,跳过下载: {file_name}')return  # 如果图片已存在,则跳过下载# 将图片 URL 添加到已下载集合downloaded_images.add(img_url)image_count += 1  # 更新图片计数logging.info(f'开始下载第 {image_count} 张图片: {img_url}')try:response = session.get(img_url, timeout=15)response.raise_for_status()with open(file_name, 'wb') as img_file:img_file.write(response.content)logging.info(f'图片已保存: {file_name}')except requests.RequestException as e:logging.error(f'下载失败: {img_url} - {e}')finally:# 休眠随机时间以避免被封time.sleep(random.uniform(1, 3))  # 调整休眠时间为1到3秒# 解析页面并提取图片URL的函数
def extract_image_urls(page_content, base_url):soup = BeautifulSoup(page_content, 'html.parser')img_tags = soup.find_all('img')img_urls = []for img in img_tags:# 尝试从多个属性中获取图片URLimg_url = img.get('data-original') or img.get('data-src') or img.get('src') or img.get('data-lazy-img')if img_url:# 处理以 // 开头的URLif img_url.startswith('//'):img_url = 'https:' + img_urlelif img_url.startswith('/'):img_url = urllib.parse.urljoin(base_url, img_url)elif not img_url.startswith('http'):img_url = urllib.parse.urljoin(base_url, img_url)# 仅保留 JPEG 和 JPG 格式if re.search(r'\.(jpe?g)$', img_url, re.IGNORECASE):img_urls.append(img_url)# 去重img_urls = list(set(img_urls))logging.info(f'找到 {len(img_urls)} 张JPEG/JPG图片')return img_urls# 处理页面的函数
def process_page(url):logging.info(f'正在处理页面: {url}')try:response = session.get(url, timeout=15)response.raise_for_status()except requests.RequestException as e:logging.error(f'请求失败,URL: {url} - {e}')return []page_content = response.textimg_urls = extract_image_urls(page_content, url)return img_urls

完成结果:

作业心得:

这个任务让我意识到数据存储和管理在爬虫项目中的重要性,同时也让我体会到在真实项目中处理文件时需要注意的细节。

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

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

相关文章

设计思想py 前置后置处理python脚本

from flask import Flask, request, jsonifyimport json app = Flask(__name__) # 用于存储前置和后置脚本pre_script = def pre_process(data): # 在这里编写你的前置处理逻辑 return data post_script = def post_process(response): # 在这里编写你的后置处理逻辑 …

Linux服务器上安装git(运维向)

(1).参考文献 官网在线教程:https://git-scm.com/book/zh/v2 官方网站:https://git-scm.com/ (2).实验环境 2核2G CentOS7.6.1810 (3).安装git1)yum或dnf安装[root@VM-0-17-centos ~]# dnf -y install git-all2)源码安装安装依赖包[root@VM-0-17-centos ~]# dnf -y install d…

公司网站怎么修改名称?后台网站标题怎么修改?

修改公司网站名称和后台网站标题的具体步骤会根据你使用的网站平台和技术栈有所不同。以下是几种常见情况下的操作方法: 1. 使用内容管理系统(CMS) WordPress登录后台:打开浏览器,输入你的WordPress后台地址,通常是 https://yourdomain.com/wp-admin。 输入用户名和密码登…

怎样修改网站公司名称?公司网站修改的方案?

修改网站上的公司名称涉及多个步骤,具体取决于网站的技术架构和内容管理系统(CMS)。以下是一般的修改方案:备份网站数据:在进行任何更改之前,确保对整个网站进行备份,包括数据库和文件系统,以防出现意外情况。更新数据库中的公司名称:如果网站使用数据库存储信息,需要…

如何修改网站后台的图片?php网站显示页面修改密码?

针对你的问题,我将其分为两部分来解答:一是如何修改网站后台的图片;二是如何在PHP网站上实现密码修改功能。 1. 如何修改网站后台的图片步骤一:访问网站后台登录到你网站的管理员界面或控制面板。 步骤二:查找媒体管理区域在大多数内容管理系统(如WordPress)中,会有一个…

[数据集成/数据同步] 基于数据库增量日志的数据同步方案 : Flink CDC/Debezium/DataX/Canal/Oracle Goldengate/Kettle/Sqoop

1 概述 简述:CDC/增量数据同步CDC 的全称是 Change Data Capture(增量数据捕获)在广义的概念上,只要能捕获数据变更的技术,我们都可以称为 CDC 。 我们目前通常描述的 CDC 技术主要面向数据库的变更,是一种用于捕获数据库中数据变更的技术。CDC 的技术实现方案基于查询的 C…

怎么修改网站后台数据?网站后台修改框架图标?

要修改网站后台的数据或更改框架图标,通常需要访问和操作网站的后端管理系统或直接编辑相关的数据库和前端文件。以下是具体步骤: 修改网站后台数据登录后台管理界面:使用管理员账号登录到网站的后台管理系统。定位数据:导航到需要修改的数据模块,如用户管理、文章管理等。…

第2课笔记 linux系统指令

测试分类linux虚拟机搭建 linux命令: 一、linux介绍 1、Linux是一个免费、开源的操作系统,能多用户、多任务、支持多线程和多CPU的操作系统,相对windows更加稳定,在unix系统的基础上开发的系统; 注解:(1)免费:不要钱 (2)源代码公开 (3)多用户 :可以在不同用户…