非常好 👍
我们现在来学习 Python Web Crawler(第2.1课)——多循环嵌套练习。
这一课非常重要,它能让你熟练掌握多层循环的逻辑结构,为后面解析网页、多层级爬取网页(如列表页 → 详情页 → 评论页)打下坚实基础。
🐍 Python Web Crawler(第2.1课)
—— 多循环嵌套练习(for 循环 + while 循环)
一、循环在爬虫中的应用
在爬虫程序中,循环无处不在 👇
爬取目标 | 循环结构示例 |
---|---|
翻页爬取 | for page in range(1, 11) |
批量爬取多个网址 | for url in url_list: |
从分类页爬取多个子链接 | 嵌套循环(外层分类 → 内层详情页) |
二、单层循环复习(基础)
for i in range(1, 6):
print(f"第 {i} 页数据爬取中...")
输出:
第 1 页数据爬取中...
第 2 页数据爬取中...
第 3 页数据爬取中...
第 4 页数据爬取中...
第 5 页数据爬取中...
✅ 用于爬取分页网站(例如“第1页、第2页…”)。
三、双层循环示例(基础练习)
for page in range(1, 4): # 外层循环 → 页码
for item in range(1, 6): # 内层循环 → 每页的内容项
print(f"正在爬取第 {page} 页的第 {item} 条数据...")
输出:
正在爬取第 1 页的第 1 条数据...
正在爬取第 1 页的第 2 条数据...
...
正在爬取第 3 页的第 5 条数据...
📌 外层循环控制页面,内层循环控制每页的元素。
四、三层循环(高级练习)
for site in ["新闻站", "论坛站", "电商站"]:
for page in range(1, 4):
for item in range(1, 4):
print(f"{site} - 第 {page} 页 - 第 {item} 条数据")
输出:
新闻站 - 第 1 页 - 第 1 条数据
新闻站 - 第 1 页 - 第 2 条数据
...
电商站 - 第 3 页 - 第 3 条数据
📘 实际爬虫中对应结构:
网站分类 → 翻页爬取 → 抓取每条数据
五、while 循环嵌套(动态条件)
page = 1
while page <= 3:
item = 1
while item <= 5:
print(f"第 {page} 页,第 {item} 条数据")
item += 1
page += 1
✅ 用于不知道总页数、通过条件控制循环结束的爬虫。
例如:网站翻页到“没有更多数据”时自动停止。
六、循环嵌套 + 控制语句(break / continue)
示例 1:遇到异常中断爬取
for page in range(1, 6):
for item in range(1, 6):
if page == 3 and item == 2:
print("⚠️ 出现错误,中断当前页!")
break # 结束内层循环
print(f"爬取:第 {page} 页 - 第 {item} 条数据")
输出:
爬取:第 1 页 - 第 1 条数据
...
⚠️ 出现错误,中断当前页!
...
示例 2:跳过异常数据继续爬取
for page in range(1, 4):
for item in range(1, 6):
if item == 3:
print("⚠️ 跳过无效数据")
continue
print(f"第 {page} 页 - 第 {item} 条数据")
七、综合练习:多网站、多页面、多条数据爬取
# 模拟从多个网站爬取不同页数的数据
websites = ["A新闻网", "B电商网", "C论坛网"]
for site in websites:
print(f"==== 开始爬取 {site} ====")
for page in range(1, 4):
print(f"正在爬取 {site} 第 {page} 页")
for item in range(1, 6):
print(f"→ {site} 第 {page} 页 - 第 {item} 条数据")
print(f"==== {site} 爬取完成 ====\n")
输出示例:
==== 开始爬取 A新闻网 ====
正在爬取 A新闻网 第 1 页
→ A新闻网 第 1 页 - 第 1 条数据
→ ...
==== A新闻网 爬取完成 ====
📘 对应真实爬虫逻辑:
多站点 → 每站点多页 → 每页多条数据
八、进阶实战:列表页 + 详情页爬取逻辑(伪代码)
# 外层:爬取每一页
for page in range(1, 6):
print(f"开始解析第 {page} 页")
article_urls = [f"http://example.com/article_{page}_{i}" for i in range(1, 4)]
# 内层:爬取每个文章详情页
for url in article_urls:
print(f" 正在访问详情页:{url}")
# (这里通常是 requests.get(url) + BeautifulSoup解析)
✅ 符合爬虫实际结构:
列表页循环(for page) → 详情页循环(for url)
九、挑战练习题 💪
1️⃣ 打印九九乘法表(双层循环)
2️⃣ 模拟从 3 个网站各爬取 2 页、每页 4 条数据
3️⃣ 用 while 循环实现 1~100 的累加和(并打印中间过程)
4️⃣ 模拟翻页爬取 + 遇错误跳过 + 最后统计爬取总条数
🔟 小结
循环类型 | 用途 | 示例 |
---|---|---|
单层循环 | 翻页爬取 | for page in range(1, 6) |
双层循环 | 页 → 数据项 | for page in …; for item in … |
三层循环 | 分类 → 页 → 内容 | for site in …; for page in …; for item in … |
while 循环 | 不确定次数 | while next_page_exists: … |
break | 结束循环 | 异常终止当前循环 |
continue | 跳过当前循环 | 跳过异常数据 |
发表回复