2012-09-20 4 views
25

私は多くのスクレイパーを書いていますが、私は無限のスクロールバーをどのように扱うのか本当に分かりません。最近のほとんどのウェブサイトなど、Facebook、Pinterestには無限のスクロールがあります。無限のスクロールを持つウェブサイトをこすります

+2

最も簡単なのは、これらのサイトのAPIを使用することです。これは、はるかに簡単で信頼性の高いオプションです。それ以外はJavaScriptを処理する必要があります。これは基本的にフルブラウザを実行することを意味します。このようなライブラリは存在します。 –

+0

はシミュレーションのように聞こえますが、jscriptを扱ういくつかの例を指摘できますか? –

答えて

24

セレンを使用して、無限のスクロールウェブサイト(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を使用してセレンをインストールします。

+0

ループは100回スクロールすることを意味しますか?ここで、100は無作為に選ばれた数です。そうですか? –

+0

@satarupaあなたはループが100回スクロールするのが正しい –

20

無制限のスクロールドdo(Lattywareのメモ)を持つほとんどのサイトにも適切なAPIがあります。これを使用してスクレイピングを行うよりも、より良いサービスを提供できます。

しかし、あなたがこすりする必要がある場合...

このようなサイトでは、ページの一番下に達すると、サイトからの追加コンテンツを要求するためにJavaScriptを使用しています。その追加のコンテンツのURLを把握し、それを取得するだけです。必要なURLを調べるには、スクリプトを調べるか、Firefox Webコンソールを使用するか、debug proxyを使用します。

はたとえば、ネットを除くすべてのフィルタボタンをオフにし、そしてあなたがこすりしたいサイトをロードし、FirefoxのWebコンソールを開きます。ロードされると、すべてのファイルが表示されます。 Webコンソールを見ながらページをスクロールすると、追加のリクエストに使用されているURLが表示されます。次に、そのURLを自分で要求し、そのデータがどの形式であるか(おそらくJSON)を確認し、Pythonスクリプトに取り込みます。 AjaxのソースのURLを見つける

+0

具体的な例を教えてください。 – tatsuhirosatou

+0

私はいくつかの詳細を追加しました、それが助けてくれることを願っています! – kindall

1

は最良の選択肢となりますが、それは特定のサイトのために面倒なことができます。あるいは、QWebKitのようなヘッドレスブラウザをPyQtから使用して、DOMツリーからデータを読み込みながらキーボードイベントを送信することもできます。 QWebKitには素敵でシンプルなAPIがあります。

関連する問題