1

たとえば、ページを解析するために BeautifulSoup を使用しているとします。私のコードでは、1 つのクエリに対して少なくとも 7 ページあることがわかります。

ページネーションは次のようになります

 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 ページに到達したら、それを個別に処理することだと思います。これにアプローチするための最良の方法についての提案と解決策を探しています。

4

3 に答える 3

6

おそらく、いつ終了するかを決定する変更可能な状態を持つジェネレーターを作成できます...しかし、このような単純なものはどうですか?

page = 1
while page < num_pages + 1:
    # do stuff that possibly updates num_pages here
    page += 1
于 2009-05-03T10:07:23.553 に答える
3

これはコードのない答えですが、美しいスープでできることを利用すれば簡単だと思います:

まず、最初のページのどこかにページ番号とリンクがあります。あなたの質問から、彼らは次のようになります:

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. 次のリンクがないページにヒットした場合、最後の # ページ リンクが総ページ数です。
于 2009-05-03T11:05:47.420 に答える
1

私はジョンのwhileベースのソリューションが好きですが、 a を使用するには、次のforようにすることができます:

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

つまり、ループしている範囲に名前を付けて、必要に応じて拡張できるようにする必要があります。反復しているコンテナーを変更することは、通常は嫌われますが、この特定の非常に制約のあるケースでは、実際には便利な慣用句になる可能性があります。

于 2009-05-03T19:27:35.140 に答える