Python爬虫如何添加循环实现网站多分页内容批量抓取
改造方案
完全保留原有页面解析、链接提取、结果存储的核心逻辑,仅在外层新增分页遍历能力,没有改动任何原有爬取规则:
- 拆分固定URL前缀,遍历页码时自动拼接对应数字生成分页地址
- 新增基础请求容错,单页/单个链接访问失败不会直接中断整个爬取任务
- 修复原代码索引遍历的越界隐患:原逻辑会跳过第一条链接、且遍历到最后一条时会触发索引超出范围的报错
- 支持自定义分页爬取范围,可按需调整起止页码
改造后可直接运行的代码
from bs4 import BeautifulSoup import requests import re import urllib.request from urllib.request import Request, urlopen # 基础URL配置,填写不带分页数字的固定前缀 BASE_URL = "domain.com/" # 配置要爬取的分页起止范围,按需修改即可 PAGE_START = 1 PAGE_END = 10 # 遍历所有分页执行原有爬取逻辑 for page_num in range(PAGE_START, PAGE_END + 1): # 生成分页URL,第一页默认不带数字后缀 if page_num == 1: current_url = BASE_URL else: current_url = f"{BASE_URL}{page_num}" print(f"正在爬取分页: {current_url}") # 分页请求容错 try: page = requests.get(current_url, timeout=10) page.raise_for_status() except Exception as e: print(f"分页{page_num}访问失败,自动跳过: {str(e)}") continue soup = BeautifulSoup(page.content, "html.parser") # 以下为原有爬取逻辑,未做任何规则修改 endof = soup.find_all('div',class_="th-image") links = [a['href'] for a in soup.find_all('a', href=True)] endoflinks = links[8:-8] # 修复原代码索引越界问题,遍历逻辑和原规则一致 for link in endoflinks: # 兼容相对路径、绝对路径两种链接格式 if link.startswith("http"): dwnlink = link else: dwnlink = "domain.com" + link try: r = requests.get(dwnlink, timeout=10) # 追加写入结果文件,和原写入逻辑一致 with open("output.txt", "a", encoding="utf-8") as f: f.write(r.url + "\n") except Exception as e: print(f"链接{dwnlink}访问失败,自动跳过: {str(e)}") continue
配置说明
- 修改
PAGE_START、PAGE_END参数即可指定爬取的页码范围,例如设置为1到20就会依次访问拼接了1、2...20的分页地址 - 如果你爬取的站点第一页URL也需要带数字后缀(例如
domain.com/1),删除代码中判断page_num == 1的分支,统一使用current_url = f"{BASE_URL}{page_num}"生成地址即可 - 原代码中链接切片
links[8:-8]、th-imagediv提取规则完全保留,和之前的爬取匹配规则完全一致 - 新增的超时、异常捕获仅用于规避网络波动导致的脚本崩溃,不影响核心爬取结果
内容的提问来源于stack exchange,提问作者Tab
相关产品推荐
相关产品推荐

