第一题
核心代码与运行结果:
点击查看代码
import requests
from bs4 import BeautifulSoupurl = "http://www.shanghairanking.cn/rankings/bcur/2020"resp = requests.get(url)
resp.encoding = resp.apparent_encoding
html = resp.textsoup = BeautifulSoup(html, 'html.parser')# 找到表格主体
tbody = soup.find('tbody')# 获取所有行
tr_list = tbody.find_all('tr')# 存储数据
data = []
for tr in tr_list:# 获取行中的所有单元格td_list = tr.find_all('td')# 检查是否有足够的单元格if len(td_list) < 5:continue# 提取排名信息rank_div = td_list[0].find('div')rank = rank_div.get_text().strip() if rank_div else ""# 提取学校名称name_span = td_list[1].find('span', class_='name-cn')name = name_span.get_text().strip() if name_span else ""# 提取省份信息province = td_list[2].get_text().strip()# 提取学校类型school_type = td_list[3].get_text().strip()# 提取总分total_score = td_list[4].get_text().strip()# 确保所有字段都有值后添加到数据列表if all([rank, name, province, school_type, total_score]):data.append({'rank': rank,'name': name,'province': province,'type': school_type,'score': total_score})# 打印表头和数据
print(f"{'排名':<4} {'学校名称':<15} {'省市':<4} {'学校类型':<6} {'总分':<4}")
print("-" * 45)
for row in data:print(f"{row['rank']:<4} {row['name']:<15} {row['province']:<4} {row['type']:<6} {row['score']:<4}")
心得体会:
对要爬取的数据检查就可以很快速地定位到主体表格,最主要的就是找到网页编写html的规律,这样就可以很快速地了解每个排名数据的提取方法
第二题
核心代码与运行结果:
点击查看代码
import re
import requests
import html url = "https://search.dangdang.com/?key=%CA%E9%B0%FC&category_id=10009684#J_tab"resp = requests.get(url)
resp.encoding = "gbk"
html_text = resp.text # 存储数据
data = []# 匹配商品列表的ul标签
ul = r'<ul[^>]*id="component_59"[^>]*>(.*?)</ul>'
ul_match = re.search(ul, html_text, re.S) if ul_match:ul_note = ul_match.group(1) # 获取ul标签内的内容# 匹配ul中的所有li标签(商品项)li_ = r'<li[^>]*id="\d+"[^>]*>(.*?)</li>'li_list = re.findall(li_, ul_note, re.S)# 遍历每个商品项for li_each in li_list:# 提取商品名称name_match = re.search(r'<a[^>]*title="([^"]*)"[^>]*name="itemlist-title"', li_each, re.S)name = name_match.group(1).strip() if name_match else ""# 提取商品价格price_match = re.search(r'<span class="price_n">\s*(.*?)\s*</span>', li_each, re.S)price = price_match.group(1).strip() if price_match else ""# 将¥转换为¥price = html.unescape(price)if all([price, name]):data.append({'price': price,'name': name})print(f"\n最终提取到 {len(data)} 个商品")
for row in data:print(f"{row['price']:<10} {row['name']:<30}")
第三题
核心代码与运行结果:
点击查看代码
import urllib.request
import re
import os
import time
from urllib.parse import urljoin, urlparsedef get_page_content(url):try:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'}req = urllib.request.Request(url, headers=headers)resp = urllib.request.urlopen(req, timeout=10)html_content = resp.read().decode('utf-8')return html_contentexcept Exception as e:print(f"获取页面失败: {e}")return Nonedef get_image_urls(html_content, page_url):# 匹配img标签中的src属性img_pattern = r'<img[^>]+src="([^">]+)"'img_urls = re.findall(img_pattern, html_content, re.I)# 匹配CSS背景图片css_pattern = r'background-image:\s*url\([\'"]?([^\'"\)]+)[\'"]?\)'css_urls = re.findall(css_pattern, html_content, re.I)# 合并所有图片URLall_urls = img_urls + css_urlsvalid_image_urls = []# 将相对路径转换为绝对路径for img_url in all_urls:full_url = urljoin(page_url, img_url)valid_image_urls.append(full_url)return valid_image_urlsdef download_image(img_url, download_folder):try:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36','Referer': 'https://news.fzu.edu.cn/'}# 请求图片req = urllib.request.Request(img_url, headers=headers)response = urllib.request.urlopen(req, timeout=10)img_data = response.read()# 从URL中提取文件名filename = os.path.basename(urlparse(img_url).path)if not filename:filename = f"image_{int(time.time())}.jpg"filepath = os.path.join(download_folder, filename)with open(filepath, 'wb') as f:f.write(img_data)print(f"下载成功: {filename}")return Trueexcept Exception as e:print(f"下载失败: {e}")return Falsedef main():url = "https://news.fzu.edu.cn/yxfd.htm"download_folder = "fzu_images"if not os.path.exists(download_folder):os.makedirs(download_folder)html_content = get_page_content(url)if not html_content:returnimage_urls = get_image_urls(html_content, url)print(f"找到 {len(image_urls)} 张图片")# 下载图片downloaded_count = 0for img_url in image_urls:if download_image(img_url, download_folder):downloaded_count += 1time.sleep(0.5)print(f"下载完成! 共下载 {downloaded_count} 张图片")if __name__ == "__main__":main()
Gitee仓库路径:
https://gitee.com/wudilecl/2025_crawl
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/946839.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!相关文章
InnoDB 存储引擎
1. 逻辑存储结构InnoDB 的逻辑存储结构是其管理数据、支撑核心能力的底层骨架,它以 “表空间→段→区→页→行” 的五层架构,将数据从宏观存储容器到微观记录层层划分。这套结构不仅决定了数据在磁盘的存储与访问规则…
20232320 2025-2026-1 《网络与系统攻防技术》实验三实验报告
1.实验内容
主要是各种工具和命令的使用
(1)MSFVenom编码器使用,生成EXE、JAR、PHP、Python等多种格式文件
使用-e参数选择编码器,如x86/shikata_ga_nai
使用-i参数设置编码次数
使用-f参数指定输出格式
(2)Veil…
2025年中央空调主机保养/维修/清洗/维保/维护公司推荐排行榜,水处理维保,物业公司/医院/写字楼/商场中央空调主机维保公司精选
2025年中央空调主机保养/维修/清洗/维保/维护公司推荐排行榜,水处理维保,物业公司/医院/写字楼/商场中央空调主机维保公司精选
行业背景与发展趋势
中央空调系统作为现代建筑的重要组成部分,其运行效率与稳定性直接…
251025 模拟测 总结
挂得很惨,分数就不说了。
Pro.A这种题目都做不出来,我可以退役了,哇哦!其实很简单的,想复杂了。
弄一个递归,考虑每种情况——由于这个所谓 \(c\) - 好串是有一侧全是 \(c\) 还有一侧是 \(c+1\) - 好串,可以把左…
[java 锁 02 - synchronized vs ReentrantLock ]
ReentrantLock 是 JDK 提供的手动锁(位于 java.util.concurrent.locks 包),与 synchronized 同为可重入锁,但用法和特性有显著区别。下面从 用法、核心区别、适用场景 三个维度对比,讲清楚它们的“讲究”:
synch…
AI Agent 与 Agentic AI 系统:真正的区别是什么?
大多数人把这两个词混用——但一个负责执行任务,另一个旨在达成目标。教你如何区分(以及各自的适用场景)。先来澄清当下 AI 讨论中最常见的一处混淆。 你可能经常看到大家把“AI agent”和“agentic AI system”当成…
2025 年 10 月门窗十大品牌榜单揭晓,聚焦专业制造与品牌口碑的品质之选
2025 年 10 月门窗十大品牌榜单正式揭晓,该榜单由中国建筑金属结构协会、全国工商联家具装饰业商会联合发布,是行业内兼具权威性与公信力的综合实力评选结果。本次评选突破传统单一性能评估框架,以《铝合金门窗》(…
[LangChain] 09.LCEL
LangChain Expression Language,是 LangChain 提供的一种声明式构建 链式 调用流程的方式。它允许开发者用 .pipe() 操作符将不同的模块(如提示模板、模型、解析器等)连接起来,形成一个完整的“链(Chain)”。
LC…
2025年饮料包装设备厂家权威推荐榜:缠膜机/吹瓶机/膜包机/杀菌机/水处理/套标机/贴标机/洗瓶机/卸垛机/旋盖机/液氮机/装箱机/灌装生产线/一条龙生产线/配件/灌装机
2025年饮料包装设备厂家权威推荐榜:缠膜机/吹瓶机/膜包机/杀菌机/水处理/套标机/贴标机/洗瓶机/卸垛机/旋盖机/液氮机/装箱机/灌装生产线/一条龙生产线/配件/灌装机
行业背景与发展趋势
饮料包装设备行业作为食品工业…
算法与数据结构 9 - 重链剖分
引言
尽管有些题会卡重链剖分,但它仍是一种强大的树上问题处理工具。
在许多资料中,『树链剖分』默认指重链剖分,因为它用得最多。本文明确区分『重链剖分』和『树链剖分』。
重链剖分
定义
本文中『树』默认为有根…
2025 年 10 月 AI 写标书系统最新推荐,技术实力与市场口碑深度解析
招投标领域数字化转型加速推动 AI 写标书系统成为企业核心竞争力工具,为破解选型难题,招标投标协会联合 AI 办公技术创新联盟于 2025 年第三季度启动权威测评。本次测评覆盖 42 家主流品牌,横跨政府采购、工程建设等…
AI浏览器comet拉新,一单20美元(附详细教程)
AI浏览器comet拉新,一单20美元(附详细教程)1. Comet浏览器
Perplexity出的AI浏览器Comet,最近在和OpenAI打仗,这种大厂博弈期间,普通用户是最大收益者,最近搞了一波付费拉新活动:
我们先邀请用户注册Comet,并…
若依前后端分离版学习笔记(十八)——页面权限,页签缓存以及图标,字典,参数的利用
若依前后端分离版学习笔记(十八)——页面权限,页签缓存以及图标,字典,参数的利用2025-10-26 15:43
tlnshuju
阅读(0)
评论(0) 收藏
举报pre { white-space: pre !important; word-wrap: normal !important; o…
Spring Cloud Gateway网关路由配置 - AlanLee
Spring Cloud Gateway 配置使用 lb:// 协议时,需依赖以下组件:核心依赖
Spring Cloud Gateway 依赖
需添加 spring-cloud-starter-gateway 依赖,用于启用网关功能。 <dependency><groupId>org.sp…
重构学习认知:从听讲、践行到教学的启示
读完 Scalers 关于大学生上课听讲的论述,以及娄老师围绕 “做中学” 与教练式教学的文章,不难发现这些内容共同指向了一套更科学的学习逻辑,打破了传统认知中对 “学习” 的单一理解,让人对如何高效获取知识、内化…
【c++】红黑树的部分构建
pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …
域登录态分享(类sso)
遇到一个问题,在同一主域下的多个子域之间共享登录状态的需求。例如:main.example.com 主站
learn.example.com 学习中心希望在任意子域登录后,其他子域也能自动识别登录状态,包括登出同步。Cookie 跨子域共享
浏览…