102302116 田自豪 作业1

news/2025/10/27 21:49:17/文章来源:https://www.cnblogs.com/102302116tzh/p/19170257
  • 作业1
    1)用requests和BeautifulSoup库方法定向爬取给定网址(http://www.shanghairanking.cn/rankings/bcur/2020 )的数据,屏幕打印爬取的大学排名信息。
    代码与运行结果
点击查看代码
import requests
from bs4 import BeautifulSoup
import warnings
warnings.filterwarnings("ignore")def crawl_university_ranking():url = "http://www.shanghairanking.cn/rankings/bcur/2020"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}try:response = requests.get(url, headers=headers, verify=False)response.raise_for_status()response.encoding = response.apparent_encodingsoup = BeautifulSoup(response.text, "lxml")table = soup.find("table", class_="rk-table")rows = table.find_all("tr")[1:]print("=" * 60)print(f"{'排名':<4}{'学校名称':<12}{'省市':<6}{'学校类型':<8}{'总分':<6}")print("-" * 60)for row in rows:cols = row.find_all("td")if len(cols) < 5:continuerank = cols[0].text.strip()name = cols[1].text.strip()province = cols[2].text.strip()type_ = cols[3].text.strip()score = cols[4].text.strip()print(f"{rank:<4}{name:<12}{province:<6}{type_:<8}{score:<6}")print("=" * 60)except Exception as e:print(f"爬取失败,错误原因:{str(e)}")
if __name__ == "__main__":crawl_university_ranking()

071b53cfe9ec666192242d5b55324959
2)作业心得
本次爬取大学排名的核心是定位 HTML 表格结构:通过 BeautifulSoup 的find("table", class_="rk-table")快速找到排名表格,再遍历和标签提取数据。过程中遇到两个问题:一是网页 SSL 证书警告,通过verify=False解决;二是部分学校名称含空格,用strip()去除后格式更整齐。此外,模拟浏览器的User-Agent请求头是避免被反爬拦截的关键,后续爬取其他网站需注意保留该设置。

  • 作业2
    1)用requests和re库方法设计某个商城(自已选择)商品比价定向爬虫,爬取该商城,以关键词“书包”搜索页面的数据,爬取商品名称和价格。
    代码与运行结果
点击查看代码
import urllib.request
import redef dangdang_bookbag_crawler():url = "https://search.dangdang.com/?key=%CA%E9%B0%FC&category_id=10009684#J_tab"try:response = urllib.request.urlopen(url, timeout=3)html = response.read().decode('gb2312')li_pattern = re.compile(r'<li[^>]*?>(.*?)</li>', re.S)lis = li_pattern.findall(html)name_pattern = re.compile(r'<a\s*?title="\s*([^"]*?)"', re.S)price_pattern = re.compile(r'<span class="price_n">(.*?)</span>', re.S)valid_count = 0print("当当网“书包”商品爬取结果:")print(f"{'序号':<4}{'价格':<10}{'商品名'}")print("-" * 80)for idx, li in enumerate(lis, start=1):name_list = name_pattern.findall(li)price_list = price_pattern.findall(li)if name_list and price_list:product_name = name_list[0].strip()product_price = price_list[0].strip().replace('&yen;', '¥')print(f"{idx:<4}{product_price:<10}{product_name}")valid_count += 1print("-" * 80)print(f"共爬取到 {valid_count} 件有效商品")except urllib.error.HTTPError as e:print(f"请求错误:HTTP状态码 {e.code}(可能是反爬拦截,建议添加请求头)")if __name__ == "__main__":print("开始爬取当当网“书包”商品数据...\n")dangdang_bookbag_crawler()print("\n爬取任务结束!")

178c33480ec63023beedb3862193349c
2)作业心得
通过本次调试,深刻理解Cookie在反爬中的核心作用:当当网会通过Cookie识别用户身份,若请求中缺少有效Cookie,服务器会返回 “无商品数据” 的空页面(即使User-Agent正确)。因此,爬取前必须从浏览器复制真实Cookie,这是突破基础反爬的必要步骤。

  • 作业3
    1)爬取一个给定网页(https://news.fzu.edu.cn/yxfd.htm)或者自选网页的所有JPEG、JPG或PNG格式图片文件
    代码与运行结果
点击查看代码
import re
import urllib.request
import os
from colorama import Fore, Style, initinit(autoreset=True)# ------------------------------
# 1. 定义函数:下载网页
# ------------------------------
def get_html(url):headers = {"User-Agent": "Mozilla/5.0"}req = urllib.request.Request(url, headers=headers)with urllib.request.urlopen(req) as response:html = response.read().decode("utf-8", errors="ignore")return html# ------------------------------
# 2. 定义函数:从HTML中提取jpg图片链接
# ------------------------------
def get_jpg_links(html, base_url):# 匹配 .jpg 文件链接pattern = re.compile(r'src="([^"]+?\.jpg)"', re.IGNORECASE)links = pattern.findall(html)domain = re.match(r"(https?://[^/]+)", base_url).group(1)full_links = []for link in links:if link.startswith("http"):full_links.append(link)elif link.startswith("/"):full_links.append(domain + link)else:full_links.append(base_url.rsplit("/", 1)[0] + "/" + link)return list(set(full_links))# ------------------------------
# 3. 定义函数:下载图片
# ------------------------------
def download_images(links, folder="images"):if not os.path.exists(folder):os.makedirs(folder)for i, url in enumerate(links, start=1):try:filename = os.path.join(folder, f"img_{i}.jpg")urllib.request.urlretrieve(url, filename)print(Fore.GREEN + f"下载成功: {filename}")except Exception as e:print(Fore.RED + f"下载失败: {url} ({e})")# ------------------------------
# 4. 主程序:多页面爬取
# ------------------------------
if __name__ == "__main__":base_pages = ["https://news.fzu.edu.cn/yxfd.htm","https://news.fzu.edu.cn/yxfd/1.htm","https://news.fzu.edu.cn/yxfd/2.htm","https://news.fzu.edu.cn/yxfd/3.htm","https://news.fzu.edu.cn/yxfd/4.htm","https://news.fzu.edu.cn/yxfd/5.htm",]all_links = []for page in base_pages:print(f"\n正在爬取页面: {page}")html = get_html(page)links = get_jpg_links(html, page)print(f"  找到 {len(links)} 张图片")all_links.extend(links)# 去重all_links = list(set(all_links))print(f"\n共提取 {len(all_links)} 张图片,开始下载...\n")download_images(all_links)print("\n 所有图片下载完成!")

f3f873040bc3d015a5818cba1bdcf11f
2)作业心得
先通过urllib.request结合请求头获取网页源码,再用正则表达式精准匹配标签的图片链接,尤其学会了处理不同路径类型 —— 绝对路径直接使用、根相对路径拼接域名、相对路径拼接页面基础路径,避免了链接无效的问题;同时通过set去重和os.makedirs创建文件夹,实现了图片的批量、有序保存,还通过异常捕获处理了 URL 失效、网络波动等问题,确保爬取流程稳定。

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

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

相关文章

实验二:现代C++编程初体验

T.h#pragma once #include <string> // 类T: 声明 class T {// 对象属性、方法 public:T(int x = 0, int y = 0); // 普通构造函数T(const T& t); // 复制构造函数T(T&& t); // 移动构造函数~T(); /…

公众号排版神器:2025年最新顶级AI排版软件索引指南

导语:公众号排版设计总是耗时耗力,容易出错,有什么高效工具能解决这个问题? 公众号运营者常面临排版慢、样式不统一、平台合规风险等痛点。例如,一篇千字文章手动排版需1-2小时,稍不留神可能触发违规词,导致被平…

第四篇:docker底层原理

第四篇:docker底层原理chroot技术(容器底层使用了chroot技术) chroot是一种通过改变进程的根目录来创建隔离文件系统环境的技术ldd命令用于显示二进制可执行文件或共享库所依赖的所有动态链接库# 1.创建工作目录 [r…

【中份薯条】雷柏MT760上手改装

兄弟,你也要来点薯条吗?这里有中份的🍟 前言之前买的罗技 G502无线版 和 MX ERGO 在我的高强度使用下,都是先坏微动再坏外壳,罗技发挥相当稳定🤤 那么接替 G502 的是: Master3 的异父异母亲兄弟 雷柏 MT760�…

软件测试和DevOps的关系

软件测试是 DevOps 成功实践的基石和保障,而 DevOps 为软件测试带来了革命性的挑战和机遇。它们不是对立的关系,而是深度融合、相互依赖的共生关系。你可以把测试看作是贯穿 DevOps 流水线的“质量守护神”。下面我们…

PyPDF无限循环漏洞CVE-2025-62707技术分析

本文详细分析了PyPDF库中的CVE-2025-62707安全漏洞,该漏洞在处理缺少EOF标记的DCT内联图像时会导致无限循环。文章包含漏洞描述、影响版本、解决方案和CVSS评分等技术细节,帮助开发者理解和防范此类安全问题。CVE-20…

重组蛋白技术概述

重组蛋白技术概述重组蛋白是通过基因工程技术在体外表达的蛋白质分子。该技术将目标基因序列导入表达载体,转化至宿主细胞中,利用细胞的转录翻译机制合成蛋白质。重组蛋白技术在生命科学研究中已成为不可或缺的工具,…

题解:luogu P4948 数列求和

题解:luogu P4948 数列求和 要求: \[\sum_{i = 1}^{n}{i^k a^i} \]其中 \(n \leq 10^{18},k \leq 2000\) 这种 \(k\) 次方但是 \(k\) 特别小的一般都是将 \(i^k\) 通过斯特林数展开。 由: \[x^n=\sum_{i = 0}^{n}{i…

关于springboot+Servlet报错404的问题

假如遇到使用springboot+Servlet的方式进行开发或者学习(一般是作业),其中有个经常遇到的问题是访问不到,会报404的错误,资源未加载; 网上有很多解决方法,例如加ServletComponentScan()包扫描路径,但是我帮一…

10.27 CSP-S模拟40 改题记录

爆零场HZOJ 写在前面 没想到离CSP还有4天然后创造了一次保龄的经历。。。然后就是读假题专场。其实感觉没有太难但是。。。好吧,碍于时间不多,也不说废话了。A. 公约数神庙 我无言。我以为我败在了空间,结果其实是败…

Codechef Painting Tree 题解 [ 蓝 ] [ 树形 DP ] [ 概率期望 ] [ 分类讨论 ]

Painting Tree 若干个月前模拟赛切的题,当时写了 3h+,被细节恶心坏了,遂记之。 题意可以转化为求树上存在相交链的期望时间。 考虑如何计算这个期望。显然我们可以枚举选取链的个数,根据期望的定义式来算: \[E(X)…

Linux运行命令三种方式对比

三种方式临时测试 → nohup 稳定运行 → supervisor 系统级守护 → systemd测试用例/data/test.sh #!/bin/bash # /data/test.sh - Linux 简单输出时间的 demo 脚本while true doecho "$(date +%Y-%m-%d %H:%M:%S…

P14322 「ALFR Round 11」E 空崎ヒナ 题解 (markdown)

P14322 「ALFR Round 11」E 空崎ヒナ 题解 (markdown)## P14322 「ALFR Round 11」E 空崎ヒナ 题解**Sorasaki Hina 赛高!**也是做上 BA 的题了!也是写上 BA 的题的题解了!我们 BA 厨的日子真是蒸蒸日上啊!求审核大…

详细介绍:论文阅读 (1) :Control Flow Management in Modern GPUs

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

公众号排版2025年权威推荐:揭秘有一云AI编辑器为何高效?

01|痛点雷区清单:为什么总被“排版”拖慢?层级乱:复制到后台后行距、间距、引用样式全乱,返工 ≥ 2 轮。 版式碎:字体、分隔、留白没节奏,读者滑两屏就流失。 配图难:素材东拼西凑、风格不统一,还担心侵权。 …

P14322 「ALFR Round 11」E 空崎ヒナ 题解

Sorasaki Hina 赛高!P14322 「ALFR Round 11」E 空崎ヒナ 题解 Sorasaki Hina 赛高! 也是做上 BA 的题了!也是写上 BA 的题的题解了!我们 BA 厨的日子真是蒸蒸日上啊! 求审核大大通过 QvQ。求求了! 题目描述:给…

[题解]P7074 [CSP-J 2020] 方格取数

P7074 [CSP-J 2020] 方格取数 如果设 \(f_{i,j}\) 为 \((1,1)\) 到 \((i,j)\) 的最大权值和,上下相邻的两个元素的转移就是双向的了。有后效性,无法 DP。不过题目说“不能重复经过已经走过的方格”,也就是说每一列只…

昨天线下赛的复盘

这次最大的感受:Re做题的时候不要啥都没分析出来就去写代码,不要觉得自己写着写着就能看懂,不可能的,不如先分析好,即使是先猜一下呢,还有就是测试数据不要写0,会和本身就是空的数据混了 Re1 分最少的一题,附件…

10 27

P11833因为我们有 \(a_i < a_{i+1}\) 且 \(b_i < b_{i+1}\) 这里我是想怎么样才能统计两两之间的影响,发现十分复杂并且是 \(O(N^2)\) 的也无法优化 然后我就发现时间限制的深意是否可以说是按照时间顺序从小到…

同余最短路学习报告

笑点解析:高一了终于知道同余最短路是什么了。谁家好人同余最短路真的写最短路啊同余最短路,一种题目类型,隶属于图论板块,一般是问你有 n 个值,重复选取能拼出多少值,或者拼出模 k 余 p 要多少个值等等等等。 对…