当前位置: 首页 > news >正文

102302115方朴第一次作业

102302115方朴第一次作业

任务1

代码及运行结果
import requests
from bs4 import BeautifulSouptarget_url = "http://www.shanghairanking.cn/rankings/bcur/2020"
res = requests.get(target_url)
res.encoding = "utf-8"soup_obj = BeautifulSoup(res.text, "html.parser")#通过BeauttifulSoup定位包含大学信息的表格行
uni_rows = soup_obj.find_all('tr', attrs={'data-v-389300f0': ''})print("排名 学校名称\t\t省市\t类型\t总分")
print("-" * 50)#提取打印各大学信息
for row in uni_rows:rank_elem = row.find("div", class_="ranking")if rank_elem:tds = row.find_all('td')if len(tds) >= 5:rank = rank_elem.get_text().strip()cn_name = tds[1].find("span", class_="name-cn")uni_name = cn_name.get_text().strip() if cn_name else "未知"province = tds[2].get_text().strip()uni_type = tds[3].get_text().strip()total_score = tds[4].get_text().strip()print(f"{rank:>2} {uni_name:12} {province:6} {uni_type:4} {total_score:4}")

image

心得体会

这次实验其实特简单,就是爬一个数据会动态加载的网页。解析数据我用的是BeautifulSoup,具体就是找那些带data-v-389300f0属性的td表格单元格,从里面把数据抠出来。最后用f-string把每列宽度固定好,左对齐,这样输出的时候排版才规整。
说真的,做完这个我才明白,写爬虫最难的根本不是代码语法——那些东西查一查就会了,真正费劲的是你得搞懂目标网页的DOM结构到底是咋回事。毕竟你连数据藏在哪个标签、哪个属性下面都摸不清,代码写得再溜也白搭。

任务2

代码及运行结果
import urllib.request
import re#淘宝以及京东的反爬机制比较好,所以这里对当当网进行爬取
target_url = "https://search.dangdang.com/?key=%CA%E9%B0%FC&category_id=10009684#J_tab"#获取页面内容并解码
try:page_conn = urllib.request.urlopen(target_url, timeout=3)page_content = page_conn.read().decode('gb2312')
except Exception as e:print(f"获取页面失败: {e}")page_content = ""#匹配商品列表项<li>标签
li_regex = re.compile(r'<li[^>]*?>(.*?)</li>', re.S)
#提取所有符合的<li>内容
li_items = li_regex.findall(page_content)#匹配商品名称
title_regex = re.compile(r'<a\s*?title="\s*([^"]*?)"', re.S)
#再匹配商品价格
price_regex = re.compile(r'<span class="price_n">(.*?)</span>', re.S)#遍历提取有效信息并打印
for li in li_items:#提取商品名称列表name_list = title_regex.findall(li)#再提取价格列表price_list = price_regex.findall(li)if name_list and price_list:product_name = name_list[0].strip()product_price = price_list[0].strip().replace('&yen;', '¥')print(f"{product_name}   {product_price}")

image

![image](https://img2024.cnblogs.com/blog/3714521/202510/3714521-20251027165702122-518598149.png

心得体会

本次实验以当当网图书搜索页为爬取目标,借助urllib库获取页面内容,结合re库实现了图书名称与价格的提取。核心逻辑是通过正则表达式按文本模式定位数据:用r'<a\s?title="\s([^"]?)"'匹配含title属性的a标签,捕获属性值以获取商品名;用r'(.?)'匹配价格对应的span标签,提取标签内的文本内容。
这次实践让我体会到,爬虫开发的难点不在于语法本身,而在于对网页结构的精准拆解。比如该网站中,class为"price_n"的设计成了定位价格数据的可靠标识;

  • 标签作为商品信息的独立容器,本质是网站对内容布局的结构化处理,因此需要先提取这些容器,再从中匹配具体信息,才能保证数据对应准确。此外,编码格式的选择也很关键——未采用默认的utf-8,而是根据目标网站的字符集进行适配,这一细节虽易被忽略,却直接影响数据解析的准确性。

    任务3

    代码及运行结果
    import requests
    from bs4 import BeautifulSoup
    import os
    from urllib.parse import urljoin#创建图片保存目录
    save_dir = 'fzu_pics'
    os.makedirs(save_dir, exist_ok=True)#循环处理6个页面
    for pg in range(6):#页面的顺序规则page_url = f'https://news.fzu.edu.cn/yxfd/{pg}.htm' if pg != 0 else 'https://news.fzu.edu.cn/yxfd.htm'print(f"正在处理: {page_url}")#获取页面内容然后解析resp = requests.get(page_url)resp.encoding = 'utf-8'bs_obj = BeautifulSoup(resp.text, 'html.parser')#定位包含图片的位置for img_container in bs_obj.find_all('div', class_='img slow'):pic_tag = img_container.find('img')if pic_tag and pic_tag.get('src'):#构建图片URLpic_url = urljoin(page_url, pic_tag['src'])#筛选支持的三种图片格式(jpg、jpeg、png)if pic_url.lower().endswith(('.jpg', '.jpeg', '.png')):try:#下载图片数据pic_data = requests.get(pic_url).contentbase_name = os.path.basename(pic_url)save_path = os.path.join(save_dir, base_name)#处理重复文件:同名时添加序号num = 1orig_save_path = save_pathwhile os.path.exists(save_path):name_part, ext_part = os.path.splitext(orig_save_path)save_path = f"{name_part}_{num}{ext_part}"num += 1#写入文件中with open(save_path, 'wb') as f:f.write(pic_data)print(f"  保存成功: {os.path.basename(save_path)}")except Exception as err:print(f"  保存失败: {err}")print(f"全部图片处理完毕,已保存至 '{save_dir}' 文件夹")
    

    image
    image
    image

    image

    心得体会

    这次做的是爬取福大新闻页(yxfd栏目)里的图片。
    一开始以为就是简单抓图片,结果实际弄的时候才发现细节不少:比如分页处理,首页URL是直接的yxfd.htm,后面几页得拼上数字(1.htm、2.htm这种),要是没注意这个区别,要么漏爬页面,要么直接报错;还有图片路径,网页里给的src大多是相对路径,必须用urljoin补全成完整URL,不然根本下载不了。另外,之前没太在意重复文件名的问题,这次加了个计数器——如果同个文件名已经存在,就自动在后面加_1、_2,总算不用手动改文件名避免覆盖了,这点还挺实用的。
    其实最花时间的不是写代码,是找对图片的“藏身地”。得先定位到带img标签的div容器(就是class叫“img slow”的那些),再从里面抠出img标签的src属性,要是没找对这个容器,很容易把页面里其他无关的图片也爬下来。还有筛选图片格式,只留jpg、jpeg、png这几种常用的,能少下不少没用的文件,也省空间。
    总结下来就是,爬图片看着简单,其实核心还是摸透网页的结构——知道数据藏在哪个标签、哪个属性里,再把路径补全、格式筛对、细节(比如重复文件)处理好,比单纯记语法管用多了。要是这些地方没搞明白,代码写得再溜,要么爬不到东西,要么爬一堆乱七八糟的,白费力气。

    gitee链接 https://gitee.com/fang-pu666/fp888/tree/homework/

  • http://icebutterfly214.com/news/387/

    相关文章:

  • 解题报告-梦熊 CSP-S2025 模拟赛T2
  • 鄙“站”麻将和算24,刷新后会换
  • 20232422 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 20232404 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 「WC2014-紫荆花之恋」题解
  • 谢谢你周医生
  • 来源未知
  • Date 10.27
  • 10.27及动手动脑
  • go包装bing搜索
  • 鼾声识别芯片方案和睡眠产品的应用场景
  • 2025年工程管理软件公司综合推荐榜:助力建筑行业数字化升级
  • Excel高性能异步导出完整方案!
  • 2025年多功能综合杆厂家排名前十推荐
  • 2025年度在线网站客服系统综合排行榜正式发布
  • JDD Oxygen智能零售论坛 | 《大模型时代的广告营销变革与实践》
  • 2025年市面上新加坡留学品牌、行业内公司及口碑产品推荐排行
  • 11-文件上传
  • TensorFlow与PyTorch深度对比分析:从基础原理到实战选择的完整指南 - 指南
  • Navicat 17 超详细保姆级下载安装教程:附激活工具使用步骤​
  • el-date-picker样式修改
  • 浅谈 Agent 开发工具链演进历程
  • 电梯调度算法结对编程作业
  • 2025质量可靠的义乌刺绣工厂推荐榜
  • DP1312多协议高性能读卡芯片支持A/B/Felaca/18092智能门锁读卡器模拟卡兼容PN512 - 动能世纪
  • 2025年10月兰花油品牌推荐榜单:多维度深度对比与选择指南
  • 2025 年1KV 冷缩硅橡胶电缆附件,冷热缩电缆附件,绕包电缆附件,熔接电缆附件厂家最新推荐,产能、专利、环保三维数据透视
  • 低代码开发便捷的技术深度解析
  • 2025年浅拾兰花双萃致臻精华油:从成分与科技维度解析其护肤功效
  • 销售公司绩效考核全攻略:维度、原则与数字化赋能方案