Scrapy:遇到302时如何停止请求?

2024-03-21

我正在使用 Scrapy 2.4 从 start_urls 列表中抓取特定页面。这些 URL 中的每一个可能都有 6 个结果页面,因此我请求全部结果页面。

然而,在某些情况下,只有 1 个结果页面,所有其他分页页面都会返回 302 到 pn=1。在这种情况下,我不想跟随 302,也不想继续查找页面 3、4、5、6,而是继续查找列表中的下一个 URL。

在出现 302/301 的情况下如何退出(继续)此 for 循环以及如何不遵循该 302?

def start_requests(self):
    for url in self.start_urls:
        for i in range(1,7): # 6 pages
            yield scrapy.Request(
                url=url + f'&pn={str(i)}'
            )

def parse(self, request):

    # parse page
    ...

    # recognize no pagination and somehow exit the for loop
    if not response.xpath('//regex'): 
        # ... continue somehow instead of going to page 2

你的方法的主要问题是从start_requests我们无法预先知道存在多少有效页面。

处理此类案件的常用方法
就是用这种方式来逐个调度请求而不是循环:

class somespider(scrapy.Spider):
...
    def start_requests(self):
        ...
        for u in self.start_urls:
            # schedule only first page of each "query"
            yield scrapy.Request(url=u+'&pn=1', callback=self.parse)

    def parse(self, response):
        r_url, page_number = response.url.split("&pn=")
        page_number = int(page_number)
        ....
        if next_page_exists:
            yield scrapy.Request(
            url = f'{r_url}&pn={str(page_number+1)}',
            callback = self.parse)
       else:
           # something else
           ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scrapy:遇到302时如何停止请求? 的相关文章

随机推荐

  • Breezejs EntityManager MetadataStore 和 fetchEntityByKey

    我有一个 SPA 应用程序 durandaljs 并且有一条特定的路线 可以在其中映射我想要获取的实体的 id 模板是 todoDetail id 例如 todoDetail 232 或 todoDetail 19 在 viewmodel
  • Android 中具有负半径的形状角

    我想创建一个带有角的复合视图 如下所示 这在 Android 中怎么可能呢 如果有人遇到同样的问题 最好的方法是使用 9 png 绘图 在 xml 中这是不可能的
  • default_batch_fetch_size推荐值

    我正在学习一些休眠教程 并陷入了default batch fetch size 阅读专家评论 Hibernate 可以用于性能敏感的应用程序吗 https stackoverflow com questions 651664 can hi
  • 修改 bootstrap Popover Html 内容不持久

    我有以下弹出窗口设置 弹出图标启动器
  • CURL 命令行 URL 参数

    我正在尝试发送DELETE使用 CURL 进行带有 url 参数的请求 我在做 curl H application x www form urlencoded X DELETE http localhost 5000 locations
  • 强制在 IE 中重新应用样式表

    考虑这个 HTML ul li first li li second li li third li ul 这个CSS li first child background yellow 还有这个 JavaScript jQuery ul ap
  • 创建多态透镜

    我能够为最后一个字段创建一个镜头 c 在我的数据类型中执行以下操作 LANGUAGE DuplicateRecordFields data X1 a c X1 a a b Int c c data X2 a b c X2 a a b b c
  • 如何在 PyQt 中自定义 QCompleter 弹出窗口?

    我有一些对于 QLineEdit 的 QCompleter 的定制感兴趣的东西 我想让它的行为类似于 Chrome 中的地址 搜索栏 如何限制显示的行数 例如 即使有 15 个匹配项 我也只希望 QCompleter 显示 5 个 如何调整
  • SQLite - 将带有换行符的字符串从csv文件插入数据库

    All 我正在尝试将长文本条目注入 SQLite 数据库的 TEXT 字段中 该文本中有新行 即它跨越多个段落 如果我手动执行 INSERT 我可以显示新行 INSERT INTO LOGENTRY VALUES 5 40 PLACE li
  • 如何截断 .net 中的日期?

    除了 DateTime ctor new DateTime year month day 之外 还有其他方法来截断日期吗 日期时间 日期 http msdn microsoft com en us library system dateti
  • 如何将更多参数传递给令牌端点 Web api 2

    我需要将更多参数传递给令牌端点 如下所示 grant type 密码 用户名 Alice 密码 密码123 peop1 值 Prop2 值 获取令牌 我如何传递这些以及我可以在服务器上哪里获取它们 OAuth2 资源所有者密码流定义了这些参
  • 查找给定文本中的子字符串.. C 程序

    char substring char text int position int length int i j 0 char temp for i position 1 i
  • 无法以json格式将数据从php添加到jqGrid

    你好 StackOverFlow 国家 我正在尝试向 jqGrid 添加信息 该信息是从 MySQL 数据库检索的 我有两个文件 gt index html 和 data php 都在同一目录中 index html 来源 gt
  • SQL |返回最小值 |动态多行

    我需要创建一个查询 仅返回特定列中具有最小值的行 我有这个结果 示例 Name Description Order Name1 A 1 Name1 B 2 Name1 C 3 Name2 A 1 Name2 B 2 Name2 C 3 我想
  • 按字典顺序比较字符串

    我认为如果我在 C 中使用 gt 和 if aa gt bz cout lt lt Yes 这不会打印任何内容 这就是我需要的 但是如果我输入 if aa gt bzaa cout lt lt Yes 这将打印 是 为什么会发生这种情况 或
  • 将 MySQL 列值设置为 NULL 而不是 0 或 '' 对磁盘空间的影响

    我试图了解处理大部分为空的列的最佳方法磁盘空间 and 指数表现 将所有空位放入 NULL 与 对于 varchar text 与 0 对于 int 之间有区别吗 Thanks 不 使用 NULL 不会比空占用更少的空间VARCHAR or
  • Facebook 分享“可点击”网址链接问题

    我在 Facebook 中遇到可点击 url 链接的问题 正如您所看到的 nr 1 不可点击 但 nr 2 和 3 可以点击 有时它是可点击的 有时则不可点击 随机 我想要的是所有共享链接都不像 nr 1 那样 可点击 我怎样才能解决这个问
  • jQuery .slideUp 问题

    slideDown 工作正常 当第二次单击链接时 会再次出现 slideDown 动画 而不是 slideUp 请帮我一下 谢谢 document ready function toggleButton click function if
  • mysqldump 命令中的语法错误

    mysqldump mydatabase lt my path to sqlfile sql 这是我下达的命令 这个语法错误的原因可能是什么 我很确定它是正确的 我正在尝试将 sql 文件加载到我的数据库中 use mysqldump u
  • Scrapy:遇到302时如何停止请求?

    我正在使用 Scrapy 2 4 从 start urls 列表中抓取特定页面 这些 URL 中的每一个可能都有 6 个结果页面 因此我请求全部结果页面 然而 在某些情况下 只有 1 个结果页面 所有其他分页页面都会返回 302 到 pn