作业1
代码与运行结果
import urllib.request
from bs4 import BeautifulSoupurl ="http://www.shanghairanking.cn/rankings/bcur/2020"
response = urllib.request.urlopen(url, timeout=3)
html= response.read().decode('utf-8')
soup = BeautifulSoup(html, 'lxml')
name = soup.find_all(name='img',class_="univ-logo")
province = soup.find_all('td', attrs={"data-v-389300f0": True})
l=len(name)
print(f"{'排名':<6}{'学校名称':<16}{'省市':<8}{'学校类型':<10}{'总分'}")
for i in range(l):a=i+1b=name[i]['alt']c=province[i*6+2].text.strip()d=province[i*6+3].text.strip()e=province[i*6+4].text.strip()print(f"{a:<6}{b:<18}{c:<8}{d:<8}{e}")

作业心得
本次实验的核心是爬取一个动态加载数据的网页。在数据解析上,我使用了BeautifulSoup。然后通过查找名字为td,标签为data-v-389300f0的表格单元格提取数据。最后用格式化字符串f-string设置各列左对齐宽度,保证排版整齐。这个实验让我深刻体会到,爬虫开发的核心难点,往往不在于代码语法本身,而在于对目标网页 DOM 结构的深度理解
作业2
代码与运行结果
import urllib.request
from bs4 import BeautifulSoupurl = "https://search.dangdang.com/?key=%CA%E9%B0%FC&category_id=10009684#J_tab"
response = urllib.request.urlopen(url, timeout=3)
html= response.read().decode('gb2312')
soup = BeautifulSoup(html, 'lxml')
name = soup.find_all('a', attrs={'class': 'pic', 'name': 'itemlist-picture'})
price = soup.find_all(name='span',class_="price_n")
for i in range(len(name)):print(name[i]["title"], end=' ')print(price[i].text)

作业心得
本次实验以当当网图书搜索页为目标,通过urllib和BeautifulSoup实现了图书名称与价格的爬取。核心逻辑在于:利用find_all按标签属性定位数据 —— 通过class="pic"和name="itemlist-picture"筛选图书图片链接的标签,提取title属性获取书名;通过class="price_n"定位价格对应的标签,直接读取文本内容。循环中用end=' '控制输出格式,使书名与价格在同一行展示。这次实践让我深刻认识到,爬虫开发的关键挑战并非语法本身,而是对网页结构的精准拆解。例如,当当网页面中class="price_n"的唯一性设计,使其成为价格数据的稳定锚点;而name="itemlist-picture"这一非标准属性的使用,本质上是网站对数据抓取的隐性防御,需通过属性精确匹配突破。此外,编码格式的选择(非默认utf-8),体现了对目标网站字符集的针对性适配,这也是数据解析时容易被忽略的细节。
作业3
代码与运行结果
import urllib.request
from urllib.parse import urljoin
from bs4 import BeautifulSoup
import osurl ="https://news.fzu.edu.cn/yxfd.htm"
response = urllib.request.urlopen(url, timeout=3)
html= response.read().decode('utf-8')
soup = BeautifulSoup(html, 'lxml')
imgs = soup.find_all(name='img')
save_folder = "images"if not os.path.exists(save_folder):os.makedirs(save_folder)
for i in range(len((imgs))):img_src = imgs[i].get('src', '')full_img_url = urljoin(url, img_src)filename = full_img_url.split('/')[-1].split('?')[0]path = os.path.join(save_folder,filename)urllib.request.urlretrieve(full_img_url,path)

作业心得
本次实验实现了福州大学新闻网页面图片的批量下载,核心逻辑围绕 “图片链接解析 - URL 标准化 - 本地存储” 展开。代码通过BeautifulSoup提取所有标签的src属性,利用urljoin将相对路径转换为绝对 URL,再通过urlretrieve按文件名保存至指定文件夹。实践中最深刻的体会是:网络资源爬取的难点不仅在于数据提取,更在于 “URL 标准化” 与 “文件系统适配” 的细节处理。此外,urljoin的应用解决了 “相对路径无法直接访问” 的核心问题,这让我意识到:在跨页面资源爬取时,URL解析器是比标签定位更基础的工具。