使用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
相关产品推荐
相关产品推荐

