在Python中动态更改范围?
假设我使用BeautifulSoup解析页面,我的代码计算出一个查询至少有7个页面 分页看起来像在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
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
请注意,没有[下一个]链接
因此,忘记发电机和量程,跟踪中间量程等。只需执行以下操作:
这里有一个无代码的答案,但我认为如果你充分利用“靓汤”让你做的事情,这很简单: 首先,在第一页的某处有页码和链接;从你的问题来看,它们是这样的:
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
请注意,没有[下一个]链接
因此,忘记发电机和量程,跟踪中间量程等。只需执行以下操作:
我喜欢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...
也就是说,您必须为正在循环的范围指定一个名称,以便在需要时扩展它。通常不赞成更改正在迭代的容器,但在这种特定且高度受限的情况下,它实际上是一种有用的习惯用法