私は多くのスクレイパーを書いていますが、私は無限のスクロールバーをどのように扱うのか本当に分かりません。最近のほとんどのウェブサイトなど、Facebook、Pinterestには無限のスクロールがあります。無限のスクロールを持つウェブサイトをこすります
答えて
セレンを使用して、無限のスクロールウェブサイト(twitterやfacebookなど)をスクラップすることができます。
ステップ1:必要に応じてデータを出力:無限スクロールを自動化し、
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import sys
import unittest, time, re
class Sel(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(30)
self.base_url = "https://twitter.com"
self.verificationErrors = []
self.accept_next_alert = True
def test_sel(self):
driver = self.driver
delay = 3
driver.get(self.base_url + "https://stackoverflow.com/search?q=stckoverflow&src=typd")
driver.find_element_by_link_text("All").click()
for i in range(1,100):
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(4)
html_source = driver.page_source
data = html_source.encode('utf-8')
if __name__ == "__main__":
unittest.main()
ステップ3をソースコードを抽出するために以下のコードを使用:PIP
pip install selenium
ステップ2を使用してセレンをインストールします。
ループは100回スクロールすることを意味しますか?ここで、100は無作為に選ばれた数です。そうですか? –
@satarupaあなたはループが100回スクロールするのが正しい –
無制限のスクロールドdo(Lattywareのメモ)を持つほとんどのサイトにも適切なAPIがあります。これを使用してスクレイピングを行うよりも、より良いサービスを提供できます。
しかし、あなたがこすりする必要がある場合...
このようなサイトでは、ページの一番下に達すると、サイトからの追加コンテンツを要求するためにJavaScriptを使用しています。その追加のコンテンツのURLを把握し、それを取得するだけです。必要なURLを調べるには、スクリプトを調べるか、Firefox Webコンソールを使用するか、debug proxyを使用します。
はたとえば、ネットを除くすべてのフィルタボタンをオフにし、そしてあなたがこすりしたいサイトをロードし、FirefoxのWebコンソールを開きます。ロードされると、すべてのファイルが表示されます。 Webコンソールを見ながらページをスクロールすると、追加のリクエストに使用されているURLが表示されます。次に、そのURLを自分で要求し、そのデータがどの形式であるか(おそらくJSON)を確認し、Pythonスクリプトに取り込みます。 AjaxのソースのURLを見つける
具体的な例を教えてください。 – tatsuhirosatou
私はいくつかの詳細を追加しました、それが助けてくれることを願っています! – kindall
は最良の選択肢となりますが、それは特定のサイトのために面倒なことができます。あるいは、QWebKit
のようなヘッドレスブラウザをPyQt
から使用して、DOMツリーからデータを読み込みながらキーボードイベントを送信することもできます。 QWebKit
には素敵でシンプルなAPIがあります。
- 1. ウェブサイト内で無限に繰り返される背景を持つ視差スクロール
- 2. UITableViewと配列を持つ無限スクロール
- 3. React - 無限スクロール - 動的高さを持つ子要素
- 4. このサンプルAngularJS無限スクロールのサンプル
- 5. イオン無限スクロール
- 6. 無限スクロールUIPageViewController
- 7. AngularFire2無限スクロール
- 8. 無限スクロール
- 9. 無限/無限のスクロールを実装するBigcommerceステンシルカテゴリリスト
- 10. djangoの無限スクロール
- 11. NodeJS - 無限のスクロール
- 12. 無限のスクロール+ツールチップ
- 13. WP_Query +無限のスクロール
- 14. jqueryの無限スクロール
- 15. GridViewのピンチズームと無限回りのスクロール
- 16. ページにJavaScriptを追加した後、私のウェブサイトに無限のスクロールがあります
- 17. プリフォーム後の無限スクロールは最初のアイテムに戻ります
- 18. これは私のウェブサイトで無限スクロールのシステムを作成する正しい方法ですか?
- 19. 無限スクロール行が重複します
- 20. JSONレスポンス無限スクロール
- 21. 角度無限スクロール
- 22. Lazyload無限スクロールで
- 23. 無限スクロールとコールバック
- 24. Wordpress Jetpack無限スクロール
- 25. Firebase RecyclerView無限スクロール
- 26. イオン1と角度jsを持つ動的データの無限スクロール1
- 27. 無限の容量を持つデータストレージ
- 28. beanを持つentityListenerの無限ループ
- 29. なぜwrapAllは無限スクロールで、多くのdivを持っていますか?
- 30. 無限スクロールでUIPageViewControllerを作成する
最も簡単なのは、これらのサイトのAPIを使用することです。これは、はるかに簡単で信頼性の高いオプションです。それ以外はJavaScriptを処理する必要があります。これは基本的にフルブラウザを実行することを意味します。このようなライブラリは存在します。 –
はシミュレーションのように聞こえますが、jscriptを扱ういくつかの例を指摘できますか? –