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

使用BeautifulSoup和requests分页爬取多页内容报错求解

问题根因

你的代码有三个明确错误,分别对应无限加载和变量报错问题:

  • 死循环:while True写在单条搜索结果的遍历循环内部,既没有循环退出条件,也没有页码跳转逻辑,程序会卡在第一条结果的处理步骤无限运行
  • 分页定位逻辑错误:分页按钮是页面级元素,不在单条搜索结果(PartialSearchResults-item)的节点范围内,在单条结果里找下一页链接永远拿不到有效值
  • 变量未定义:你参考的URL拼接规则里用到了page变量,但既没有初始化这个变量,也没有写页码遍历的循环逻辑,触发name 'page' is not defined是必然结果
可直接运行的修复代码

Ask.com每页默认返回10条左右搜索结果,分页直接通过URL的page参数控制,不需要手动解析下一页链接,爬取含首页在内共6页结果的实现如下:

import time
import requests
from bs4 import BeautifulSoup as bs

def search(request):
    if request.method == 'POST':
        search_keyword = request.POST['search']
        final_result = []
        # 配置请求头模拟浏览器,避免被反爬拦截
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
        }
        # 循环爬取第1到第6页结果
        for page in range(1, 7):
            target_url = f'https://www.ask.com/web?q={search_keyword}&page={page}'
            res = requests.get(target_url, headers=headers)
            soup = bs(res.text, 'lxml')
            result_listings = soup.find_all('div', {'class': 'PartialSearchResults-item'})
            
            for result in result_listings:
                try:
                    result_title = result.find(class_='PartialSearchResults-item-title').text.strip()
                    result_url = result.find('a').get('href')
                    result_desc = result.find(class_='PartialSearchResults-item-abstract').text.strip()
                    final_result.append((result_title, result_url, result_desc))
                except AttributeError:
                    # 跳过混合在结果里的广告、异常结构节点
                    continue
            # 加请求间隔避免频率过高被封
            time.sleep(1.5)

        context = {
            'final_result': final_result
        }
        # 补全你原有的模板渲染逻辑即可,例如 return render(request, 'search.html', context)
注意事项
  • 分页是页面级逻辑,必须放在单页结果解析的外层,不要写在单条结果的遍历循环内部
  • 你之前参考的start参数是Google等其他搜索引擎的分页规则,Ask.com直接传page页码即可,不需要做偏移量换算
  • 爬取多页时保留1-2秒的请求间隔,避免请求频率过高被网站临时封禁IP
  • 解析文本时加strip()方法,可以去掉字段首尾多余的换行、空格,返回的结果更规整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:12:23