You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:54:07