使用BeautifulSoup实现多页爬取,如何编写2至65页的遍历循环?
多页批量爬取实现方案
首先抽取公共URL前缀,遍历构造所有页面的访问地址,复用原有单页爬取逻辑即可,同时补充了反爬适配、异常处理和数据存储逻辑,完整可运行代码如下:
import requests from bs4 import BeautifulSoup import csv import time # 公共URL前缀 base_url = "https://www.expansion.com/empresas-de/ganaderia/granjas-en-general/{}.html" # 模拟浏览器请求头,避免被站点拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36" } # 存储所有爬取到的信息 all_data = [] # 构造所有页面的URL后缀:第一页是index,2-65页直接用页码数字 page_suffix_list = ["index"] + [str(page_num) for page_num in range(2, 66)] for suffix in page_suffix_list: current_url = base_url.format(suffix) try: # 发送请求,设置10秒超时 resp = requests.get(current_url, headers=headers, timeout=10) resp.encoding = resp.apparent_encoding soup = BeautifulSoup(resp.text, "html.parser") lists = soup.select("div#simulacion_tabla ul") for lis in lists: title = lis.find('li', class_="col1").text.strip() location = lis.find('li', class_="col2").text.strip() province = lis.find('li', class_="col3").text.strip() all_data.append([title, location, province]) print(f"后缀为{suffix}的页面爬取完成,当前累计数据量:{len(all_data)}") # 每页爬取后暂停1.5秒,控制请求频率避免被封 time.sleep(1.5) except Exception as e: print(f"后缀为{suffix}的页面爬取失败,错误原因:{str(e)}") continue # 所有页面爬取完成后,将数据写入CSV文件保存 with open("农场企业数据.csv", "w", encoding="utf-8-sig", newline="") as f: writer = csv.writer(f) # 写入表头 writer.writerow(["企业名称", "所在地址", "所属省份"]) writer.writerows(all_data)
代码补充说明
- 原有单页爬取逻辑完全保留,仅外层套入页面循环逻辑
- 新增异常捕获机制,单页爬取失败不会中断整体爬取任务
- 新增请求头和爬取延时,适配普通站点的反爬规则,降低被拦截概率
- 爬取到的所有数据会自动存入CSV文件,无需额外手动保存
内容的提问来源于stack exchange,提问作者Nick Gordon
相关产品推荐
相关产品推荐

