非常好 👍
我们现在来学习 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跳过当前循环跳过异常数据