2009-05-03 56 views
1

所以说我正在使用BeautifulSoup解析页面,我的代码数据表明至少有7个页面用于查询。在Python中动态改变范围?

分页看起来像

1 2 3 4 5 6 7 Next 

如果我一路分页到7,有时也有超过7页,所以如果我7页上,分页貌似

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页时单独处理。我正在寻找建议和解决方案来解决这个问题。

回答

6

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

page = 1 
while page < num_pages + 1: 
    # do stuff that possibly updates num_pages here 
    page += 1 
+0

+1:从来没有一个范围开始。 – 2009-05-03 11:06:14

2

这里有一个代码免费的答案,但我认为,如果你好好利用一下美丽的汤可以让你做到这一点很简单:

首先,你有地方页码&链接在第一页上;从你的问题,他们是这样的:

1 2 3 4 5 6 7 [next] 

不同的网站处理分页不同,有的给的链接跳转到开始/结束,但你的,你说它看起来像这样第7页后:

1 2 3 ... 7 8 9 10 [next] 

现在,在某些时候,你会到达终点,这将是这样的:

1 2 3 ... 20 21 22 23 

注意有没有[下一页]链接。

所以,不要担心发电机和范围和中间范围的跟踪等,只是这样做:

  1. 用美丽的汤来识别特定网页上的网页链接#,下一个按钮一起。
  2. 每当你看到一个[next]链接,按照它,并用美丽的汤进行重新分析
  3. 当你没有下一个链接的网页时,最后一个#页面链接是总页数。
1

我喜欢约翰的while为基础的解决方案,而是利用for你可以这样做:

pages = range(1, num_pages+1) 
for p in pages: 
    ...possibly pages.extend(range(something, something)) here... 
是,你必须给一个名字你在循环的范围

,所以你可以在需要时扩展它。改变你迭代的容器通常是不被接受的,但是在这个特定且高度受限的情况下,它实际上可能是一个有用的习惯用法。