私は多くのスクレイパーを書いていますが、私は無限のスクロールバーをどのように扱うのか本当に分かりません。最近のほとんどのウェブサイトなど、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. このサンプルAngularJS無限スクロールのサンプル
- 2. 無限スクロールUIPageViewController
- 3. 無限スクロール
- 4. jqueryの無限スクロール
- 5. djangoの無限スクロール
- 6. 無限の容量を持つデータストレージ
- 7. 無限スクロールとコールバック
- 8. Elmの無限のスクロール
- 9. テーブル上のjQuery無限スクロール?
- 10. React JSでの無限スクロール
- 11. foreachループの無限スクロール
- 12. Three20's TTScrollViewの無限スクロール?
- 13. 繰り返し要素を持つ無限列
- 14. Isotop/jqueryを使用して、無限のスクロール機能を持つtumblrの投稿を照合する
- 15. Android:無限スクロール - リストビューとカーソル
- 16. 無限水平スクロールUIScrollView
- 17. 連続ルーピングページ(未無限スクロール)
- 18. thirdpartyのJavaライブラリのリストを持つウェブサイトはありますか?
- 19. Javascript/jQueryでDIV内で無限/無限のスクロールを実装する方法
- 20. Rails:無限レベルのtodo_itemsを持つToDoリストを作成する
- 21. 無限スクロール - setContentOffset:UIScrollViewの減速を停止します
- 22. waypoint.jsで無限スクロールするには?
- 23. divを通じた無限スクロール
- 24. 無限のスクロールが終了するまで待機する - Javascript
- 25. iPhoneのウェブサイトで水平スクロールを無効にする
- 26. Jquery無限のスクロール - divのボディーのスクロールバー
- 27. RecyclerViewでの無限スクロール:これはどのように実装する必要がありますか?
- 28. 無限のスクロールとフェイスブックのコメント
- 29. qtリストの無限スクロールQMLの
- 30. ウェブリストビュー付きの無限スクロールの実装
最も簡単なのは、これらのサイトのAPIを使用することです。これは、はるかに簡単で信頼性の高いオプションです。それ以外はJavaScriptを処理する必要があります。これは基本的にフルブラウザを実行することを意味します。このようなライブラリは存在します。 –
はシミュレーションのように聞こえますが、jscriptを扱ういくつかの例を指摘できますか? –