You need to enable JavaScript to run this app. 使用Beautiful Soup批量抓取多页活动信息并导出为Word的问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

使用Beautiful Soup批量抓取多页活动信息并导出为Word的问题咨询

问题原因

你写的分页循环只完成了分页URL生成和打印的功能,完全没有和原有爬虫的请求、解析、写入逻辑关联,所以没法实现多页抓取。另外固定写死循环到第6页的逻辑不够灵活,站点分页不足6页时会产生无效请求。

调整后可直接运行的完整代码
from bs4 import BeautifulSoup
from docx import Document
import requests
import time

# 修正原user-agent中多余的反引号
user_agent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.37"
document = Document()

# 可根据需求修改最大抓取页码,也可以删除max_page限制,靠数据判空自动终止全量抓取
max_page = 6
page = 1
while page <= max_page:
    url = f"https://www.atlanticcouncil.org/events/?ac-timing=past&ac-page={page}"
    print(f"正在抓取第{page}页:{url}")
    # 发送页面请求
    data = requests.get(url, headers={"User-Agent": user_agent})
    soup = BeautifulSoup(data.text, "lxml")
    # 提取当前页活动列表
    events = soup.find_all("div", class_ = "gta-embed--content gta-event-embed--content")
    # 当前页无活动数据时自动终止循环,避免无效请求
    if not events:
        print(f"第{page}页无活动数据,抓取结束")
        break
    for event in events:
        event_name = event.find("h3", class_ = "gta-event-embed--title gta-embed--title")
        link = event.find("a")
        try:
            print(event_name.text)
            document.add_paragraph(event_name.text, style='List Bullet')
            print(link['href'])
            document.add_paragraph(link['href'])
        except:
            continue
    # 每页抓取完成后间隔2秒,避免高频请求被站点封禁
    time.sleep(2)
    page += 1

document.save('大西洋理事会过往活动汇总.docx')
关键调整点说明
  • 将网页请求、解析、活动信息提取的逻辑全部移入分页循环内,每生成一个分页URL就执行一次完整的抓取写入流程
  • 修正了原有User-Agent中多余的反引号错误,避免请求被站点的反爬策略拦截
  • 新增请求间隔逻辑,降低请求频率防止被封
  • 增加了页面活动数据判空逻辑,无数据时自动终止循环,不用手动限定最大页码也能实现全量抓取
  • 优化了输出文件名,更方便识别

内容的提问来源于stack exchange,提问作者shippy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 21:15:03