2009-05-03 30 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... 
是,你必須給一個名字你在循環的範圍

,所以你可以在需要時擴展它。改變你迭代的容器通常是不被接受的,但是在這個特定且高度受限的情況下,它實際上可能是一個有用的習慣用法。