在Python中动态更改范围?

在Python中动态更改范围?,python,beautifulsoup,Python,Beautifulsoup,假设我使用BeautifulSoup解析页面,我的代码计算出一个查询至少有7个页面 分页看起来像 1 2 3 4 5 6 7 Next 1 2 3 7 8 9 10 Next 如果我一直分页到第7页,有时会有超过7页,因此如果我在第7页,分页看起来像 1 2 3 4 5 6 7 Next 1 2 3 7 8 9 10 Next 所以现在,我知道至少还有3页。我使用一个初始过程来计算有多少页,即get_num_pages返回7 我所做的是迭代每个页面上的项目,因此 fo

假设我使用BeautifulSoup解析页面,我的代码计算出一个查询至少有7个页面

分页看起来像

 1 2 3 4 5 6 7 Next
 1 2 3    7 8 9 10 Next
如果我一直分页到第7页,有时会有超过7页,因此如果我在第7页,分页看起来像

 1 2 3 4 5 6 7 Next
 1 2 3    7 8 9 10 Next
所以现在,我知道至少还有3页。我使用一个初始过程来计算有多少页,即get_num_pages返回7

我所做的是迭代每个页面上的项目,因此

for page in range(1,num_pages + 1):
  # do some stuff here

如果脚本发现有超过7个页面,是否有方法动态更新范围?我想另一种方法是保持计数,当我到达第7页时,分别处理。我正在寻找最佳方法的建议和解决方案

您可能会创建一个具有可变状态的生成器,以确定它何时终止。。。但是像这样简单的事情呢

page = 1
while page < num_pages + 1:
    # do stuff that possibly updates num_pages here
    page += 1
page=1
页面
您可能会创建一个具有可变状态的生成器,以确定它何时终止。。。但是像这样简单的事情呢

page = 1
while page < num_pages + 1:
    # do stuff that possibly updates num_pages here
    page += 1
page=1
页面
这里有一个无代码的答案,但我认为,如果你充分利用靓汤所能提供的功能,那么答案很简单:

首先,在第一页的某处有页码和链接;从你的问题来看,它们是这样的:

1 2 3 4 5 6 7 [next]
1 2 3 ... 20 21 22 23
不同的站点处理分页的方式不同,有些站点提供了一个跳转到开始/结束的链接,但在您的站点上,您说在前7页之后是这样的:

1 2 3 ... 7 8 9 10 [next]
现在,在某个时刻,你将到达终点,它将是这样的:

1 2 3 4 5 6 7 [next]
1 2 3 ... 20 21 22 23
请注意,没有[下一个]链接

因此,忘记发电机和量程,跟踪中间量程等。只需执行以下操作:

  • 使用beautiful soup识别给定页面上的页面链接,以及“下一步”按钮
  • 每次你看到[下一个]链接时,跟随它,然后用漂亮的汤重新分析
  • 当你点击一个没有下一个链接的页面时,最后一个页面链接就是页面总数

  • 这里有一个无代码的答案,但我认为如果你充分利用“靓汤”让你做的事情,这很简单:

    首先,在第一页的某处有页码和链接;从你的问题来看,它们是这样的:

    1 2 3 4 5 6 7 [next]
    
    1 2 3 ... 20 21 22 23
    
    不同的站点处理分页的方式不同,有些站点提供了一个跳转到开始/结束的链接,但在您的站点上,您说在前7页之后是这样的:

    1 2 3 ... 7 8 9 10 [next]
    
    现在,在某个时刻,你将到达终点,它将是这样的:

    1 2 3 4 5 6 7 [next]
    
    1 2 3 ... 20 21 22 23
    
    请注意,没有[下一个]链接

    因此,忘记发电机和量程,跟踪中间量程等。只需执行以下操作:

  • 使用beautiful soup识别给定页面上的页面链接,以及“下一步”按钮
  • 每次你看到[下一个]链接时,跟随它,然后用漂亮的汤重新分析
  • 当你点击一个没有下一个链接的页面时,最后一个页面链接就是页面总数

  • 我喜欢John的基于
    的解决方案,而
    是基于
    的解决方案,但要使用
    for
    可以执行以下操作:

    pages = range(1, num_pages+1)
    for p in pages:
       ...possibly pages.extend(range(something, something)) here...
    

    也就是说,您必须为正在循环的范围指定一个名称,以便在需要时扩展它。通常不赞成更改您正在迭代的容器,但在这种特定且高度受限的情况下,它实际上是一种有用的习惯用法。

    我喜欢John的
    ,而
    是基于
    的解决方案,但要使用
    for
    可以执行以下操作:

    pages = range(1, num_pages+1)
    for p in pages:
       ...possibly pages.extend(range(something, something)) here...
    
    也就是说,您必须为正在循环的范围指定一个名称,以便在需要时扩展它。通常不赞成更改正在迭代的容器,但在这种特定且高度受限的情况下,它实际上是一种有用的习惯用法