102402119陈封第一次作业
作业① 软科中国大学排名定向爬虫
1)软科大学排名爬虫实验
import requests
from bs4 import BeautifulSoup
def get_page_html(target_url):
"""
请求网页,获取网页源代码
:param target_url: 目标网页地址
:return: 网页的html文本
"""
# 请求头,模拟浏览器访问,防止被服务器拦截
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"
}
# 发送get请求
response = requests.get(target_url, headers=headers)
response.encoding = "utf-8"
return response.text
def parse_university_data():
"""
解析软科2020中国大学排名数据
:return: 解析完成的大学排名列表,每一项是[排名,学校名称,省市,学校类型,总分]
"""
page_url = "http://www.shanghairanking.cn/rankings/bcur/2020"
# 软科数据接口,页面是vue动态渲染,真实数据从这个接口获取
data_api_url = "https://www.shanghairanking.cn/api/pub/v1/bcur?bcur_type=11&year=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"
}
# 获取页面html
html_text = get_page_html(page_url)
soup = BeautifulSoup(html_text, "html.parser")
# 请求json接口获取排名数据
api_response = requests.get(data_api_url, headers=headers)
json_data = api_response.json()
ranking_result = []
# 遍历每一条大学数据
for item in json_data["data"]["rankings"]:
rank = item["ranking"] # 排名
school_name = item["univNameCn"] # 学校中文名称
province = item["province"] # 省市
school_type = item["univCategory"]
total_score = item["score"] # 总分
ranking_result.append([rank, school_name, province, school_type, total_score])
return ranking_result
def print_ranking_table(ranking_list):
"""
在控制台格式化打印排名表格
:param ranking_list: 大学排名数据列表
"""
print(f"{'排名':<6}{'学校名称':<12}{'省市':<8}{'学校类型':<10}{'总分':<8}")
print("-" * 50)
# 循环输出每一行学校信息
for row in ranking_list:
print(f"{row[0]:<6}{row[1]:<12}{row[2]:<8}{row[3]:<10}{row[4]:<8}")
if __name__ == "__main__":
university_rank_data = parse_university_data()
print_ranking_table(university_rank_data)


2)心得体会
本次爬虫实验使用 requests 与 BeautifulSoup 库爬取软科中国大学排名数据,让我掌握了网页请求与 HTML 解析的基础流程。通过分析网页标签结构,提取排名、院校、省市等信息,我理解了静态网页数据抓取的原理,也学会模拟浏览器请求来完成页面访问。同时我认识到爬虫技术需要遵守网站规则与网络法规,不能恶意抓取。这次实践将 Python 网络爬虫的理论知识落地,提升了网页分析与数据提取的动手能力,也树立了合法合规使用爬虫技术的意识。
作业② 商城书包比价爬虫(requests+re)
1)商城商品比价爬虫实验
import requests
import re
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"
}
url = "https://search.dangdang.com/?key=书包"
try:
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status()
response.encoding = "gbk"
html = response.text
# 正则表达式:匹配商品名称title和价格
pattern = re.compile(r'<p class="name".*?title="(.*?)".*?<span class="price_n">¥(.*?)</span>', re.S)
result = pattern.findall(html)
print(f"{'序号':<6}{'价格':<8}{'商品名'}")
for idx, (name, price) in enumerate(result, start=1):
print(f"{idx:<6}{price:<8}{name}")
except Exception as e:
print("爬取失败:", e)


2)心得体会
本次实验利用 requests 获取当当网搜索页面源码,结合 re 正则表达式爬取 “书包” 的商品名称与价格,实现简单的商品比价爬虫。我学会了编写正则表达式对网页文本进行匹配捕获,掌握了基于字符串的网页数据提取方法。和之前 BeautifulSoup 解析 DOM 树的方式相比,正则无需构建文档树,但是容错性较差,页面标签轻微变化就会造成匹配失败。同时我也了解到爬虫需要配置请求头模拟浏览器访问,防止请求被服务器拦截。本次实践让我体会到爬虫在商品比价场景的实际用途,也再次认识到爬虫技术必须遵守网站规则,合理控制访问频率,合法采集公开信息,提升了正则编写与网页调试的动手能力。
作业③ 网页图片批量爬取爬虫
1)网页图片下载爬虫实验
import requests
from bs4 import BeautifulSoup
import os
from urllib.parse import urljoin
url = "https://news.fzu.edu.cn/yxfd.htm"
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"
}
# 创建保存图片的文件夹
save_dir = "fzu_images"
if not os.path.exists(save_dir):
os.mkdir(save_dir)
try:
resp = requests.get(url, headers=headers, timeout=10)
resp.raise_for_status()
resp.encoding = "utf-8"
soup = BeautifulSoup(resp.text, "html.parser")
# 找到所有img标签
img_tags = soup.find_all("img")
count = 0
for img in img_tags:
img_src = img.get("src")
if not img_src:
continue
# 拼接成完整url
full_img_url = urljoin(url, img_src)
# 判断后缀 jpg/jpeg/png
if full_img_url.lower().endswith((".jpg", ".jpeg", ".png")):
count += 1
# 获取图片二进制数据
img_resp = requests.get(full_img_url, headers=headers, timeout=10)
# 保存文件
file_name = os.path.join(save_dir, f"img_{count}{os.path.splitext(full_img_url)[1]}")
with open(file_name, "wb") as f:
f.write(img_resp.content)
print(f"已保存:{file_name}")
print(f"全部下载完成,共下载{count}张图片")
except Exception as e:
print("爬取异常:", e)


2)心得体会
本次图片爬虫实验,使用 requests 和 BeautifulSoup 爬取福州大学新闻网页中的 jpg、jpeg、png 图片并保存到本地指定文件夹。我学会解析网页 img 标签,利用 urljoin 将图片相对地址转为完整链接,以二进制流的形式下载图片;同时掌握了通过绝对路径创建文件夹、筛选图片后缀的方法。实验让我理解网页图片链接分为相对路径与绝对路径,若不做路径拼接处理会出现图片访问失败的问题。
浙公网安备 33010602011771号