爬虫類の動的なウェブデータ章IVアドバンスをクロール

動的なWebクロールデータ

AJAXとは何か:

AJAX(Asynchronouse JavascriptとXML)非同期JavaScriptとXML。バックグラウンドでサーバーと交換少量のデータを行うことにより、Ajaxの非同期ページの更新を行うことができます。これは、ページの特定の部分のために、ページ全体をリロードせずに更新される、ということを意味します。従来のWebページ(アヤックスを使用していない)あなたがコンテンツを更新する必要がある場合は、Webページ全体をリロードする必要があります。用いたデータ伝送の面で伝統的な形式で、そのためXMLの構文を。したがって名前はAJAX、実際には、基本的にインタラクティブなデータを使用していますJSONAJAXで、ブラウザにデータをレンダリングし、でもJSで、ロードされたデータを使用して右键->查看网页源代码、まだアヤックスでロードされたデータを見ることができない、あなただけのロードこのURLのhtmlコードを使用して見ることができます。

Ajaxのデータを取得します:

  1. 直接分析インターフェースAJAX呼び出し。そして、コード要求このインタフェース。
  2. データを得るために、セレン+ chromedriverシミュレートブラウザの動作を使用してください。
利点 短所
分析インターフェイス あなたはデータを直接要求することができます。あなたは、いくつかの解析を行う必要はありません。以下のコード、高性能。 分析インターフェイスは、特にJSのインターフェイスによって混乱の一部は、特定のjsのスキルを持って、より複雑です。爬虫類を見つけるのは簡単。
セレン ブラウザの動作の直接シミュレーション。ブラウザは、セレンを使用するように要求することができますも要求することができます。爬虫類、より安定しました。 符号量。低パフォーマンス。

セレン+ chromedriver動的データを取得します。

Seleniumロボットの同等。いくつかは、自動的なクリックなどのブラウザ上で動作する、のいくつかを扱うブラウザで人間の行動をシミュレートするデータを記入し、その上のクッキーを削除することができます。chromedriverドライバーはChrome、ブラウザ用のドライバ、彼はブラウザを使用して駆動することができます。もちろん、別のブラウザごとに異なるドライバがあります。以下は、異なるブラウザとそれに対応するドライバを示しています。

  1. クローム:https://sites.google.com/a/chromium.org/chromedriver/downloads
  2. Firefoxの:https://github.com/mozilla/geckodriver/releases
  3. エッジ:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
  4. サファリ:https://webkit.org/blog/6900/webdriver-support-in-safari-10/

セレンのインストールとchromedriver:

  1. インストールSeleniumSeleniumそこ言語の多くのバージョンは、あるので、上のJava、ルビー、Pythonとしています。我々はそれのPythonのバージョンをダウンロードしました。
     pip install selenium
    
  2. インストールchromedriver:ダウンロードしたら、それを必要としない純粋な英語のディレクトリのパーミッションを置きます。

はじめに:

今、簡単な例を用いて条件の下でBaiduのホーム・ページを取得するSeleniumchromedriverどのようにクイックスタート:

セレンインポートwebdriverをする

chromedriverの絶対パス 
driver_pathのR&LT = ' D:\ ProgramApp \ chromedriver \ chromedriver.exe ' 

#は、ドライバを初期化し、指定されたパスchromedriver 
ドライバ= webdriver.Chrome(executable_path = driver_path)
、ウェブページ要求 
driver.getを(" https://www.baidu.com/ " #のpage_sourceのことでGETページのソースコード
を印刷(driver.page_source)

 

セレン共通の操作:

より多くのチュートリアルを参照してください:http://selenium-python.readthedocs.io/installation.html#introduction

閉じます:

  1. driver.close():現在のページを閉じます。
  2. driver.quit():全体のブラウザを終了します。

位置決め要素:

  1. find_element_by_id:要素を見つけるために、IDをよります。それはと同等です。
    submitTag = driver.find_element_by_id(' SU ' 
     submitTag1 = driver.find_element(By.ID、' SU '

     

  2. find_element_by_class_name:クラス名に基づいて要素を検索します。それはと同等です。
    submitTag = driver.find_element_by_class_name(' SU ' 
     submitTag1 = driver.find_element(By.CLASS_NAME、' SU '

     

  3. find_element_by_name:name属性の値に応じて要素を検索します。それはと同等です。
    submitTag = driver.find_element_by_name(' Eメール' 
     submitTag1 = driver.find_element(By.NAME、' 電子メール'

     

  4. find_element_by_tag_name:要素を見つけるために、ラベル名によります。それはと同等です。
    submitTag = driver.find_element_by_tag_name(' DIV ' 
     submitTag1 = driver.find_element(By.TAG_NAME、' DIV '

     

  5. find_element_by_xpath:XPathをベース構文要素を取得します。それはと同等です。
    submitTag = driver.find_element_by_xpath(' // DIV ' 
     submitTag1 = driver.find_element(By.XPATH、' // DIV '

     

  6. find_element_by_css_selector:選択した要素のCSSセレクタ。それはと同等です。

    submitTag = driver.find_element_by_css_selector(' // DIV ' 
     submitTag1 = driver.find_element(By.CSS_SELECTOR、' // DIV '

     

    注意すべきで、find_element最初の要素が条件を満たして取得することです。find_elementsこれは、すべての要素が条件を満たしてもらうことです。

オペレーションフォーム要素:

  1. 操作入力部:二段階。ステップ1:要素を検索します。ステップ2:使用send_keys(value)で満たされたデータを。次のようにサンプル・コードは次のとおりです。

    inputTag = driver.find_element_by_id(' KW ' 
     inputTag.send_keys(' パイソン'

     

    使用clear方法は、入力ボックスの内容を消去することができます。次のようにサンプル・コードは次のとおりです。

     inputTag.clear()

     

  2. 操作チェックボックス:選択のためにcheckboxページ内のラベルにマウスをクリックします。選択したいので、checkboxタブを、その後、最初のラベルを選択し、[実行clickイベントを。次のようにサンプル・コードは次のとおりです。

    rememberTag = driver.find_element_by_name(" リメンバー・ミー" 
     rememberTag.click()

     

  3. 選択選択:要素を直接クリックすることはできませんを選択します。選択した要素をクリックする必要があるため。特別オファーのこの時間セレンは、クラスラベルを選択しますselenium.webdriver.support.ui.Selectこのクラスに渡されたパラメータとして取得した要素は、オブジェクトを作成します。あなたはこのオブジェクトを使用することができますので、選択します。次のようにサンプル・コードは次のとおりです。

    selenium.webdriver.support.ui インポート選択
      ラベルを選択し、選択したオブジェクトを作成し使用 
     SelectTag =選択(driver.find_element_by_name(jumpMenu ))
     インデックスに従って選択 
     selectTag.select_by_index(1 値に応じて選択 
     selectTag.select_by_value (" http://www.95yueba.com " 視覚的なテキストに基づいて選択 
     selectTag.select_by_visible_text(" 95は、クライアントを表示" #は、すべてのオプションのチェックを外す 
     (selectTag.deselect_all)

     

  4. 操作ボタン:アクションボタンは、多くの方法があります。このようなクリック、右クリック、ダブルクリックなど。ここでは最も一般的に使用を指示します。クリックです。直接呼び出しclick、その上に機能。次のようにサンプル・コードは次のとおりです。

    inputTag = driver.find_element_by_id(' SU ' 
     inputTag.click()

     

行動チェーン:

時には、ページ上の操作は手順の多くを持っているかもしれないので、この時間は、あなたは、マウスの行動鎖クラスを使用することができますActionChains完了します。例えば、今あなたが要素をクリックしてイベントを実行するためにマウスを移動します。そして、次のサンプルコード:

inputTag = driver.find_element_by_id(' KW ' 
submitTag = driver.find_element_by_id(' SU ' 

アクション = ActionChains(ドライバ)
actions.move_to_element(inputTag)
actions.send_keys_to_element(inputTag、' パイソン' 
actions.move_to_element(submitTag)
アクション。クリック(submitTag)
actions.perform()

 

複数のマウス関連の操作があります。

  • click_and_hold(要素):上のクリックが、マウスを解放しません。
  • context_click(要素):右クリックします。
  • DOUBLE_CLICK(要素):ダブルクリックします。:詳細はを参照してくださいhttp://selenium-python.readthedocs.io/api.html

操作クッキー:

  1. すべてを取得しますcookie
     以下のためのクッキーdriver.get_cookies():
          プリント(クッキー)

     

  2. キークッキーのよる取得価額:
    値= driver.get_cookie(キー)

     

  3. クッキーのすべてを削除します。
    driver.delete_all_cookies()

     

  4. 削除cookie
    driver.delete_cookie(キー)

     

ページ待ち:

Ajax技術を使用して今より多くのウェブページ、要素は完全にアウトロードされたときにプログラムが判断することはできませんように。あなたが待って、実際のページが長すぎるDOM要素に結果が出ていないが、あなたのコードは、直接このWebElementを使用している場合、例外がnullpointerがスローされます。この問題を解決するために。セレン待つので、2つの方法を提供します:1は、暗黙的に待つことです明示的な1が待っています。

  1. 暗黙の待ち時間:呼び出しますdriver.implicitly_waitあなたは要素が使用不能に取得する前に、それは最初の10秒の時間を待つことになります。次のようにサンプル・コードは次のとおりです。

    ドライバ= webdriver.Chrome(executable_path = driver_path)
    driver.implicitly_wait( 10 请求网页 
    driver.get(" https://www.douban.com/ "

     

  2. 表示待ち:待っているが、表示要素のみを特定の条件が満たされ得た後、操作を実行することを示しています。この時間以上は、それが例外をスローした場合とき、あなたはまた、最大待機時間を指定することができます。これは、待ち時間が使用する必要がありますを示しselenium.webdriver.support.excepted_conditions、条件付き期待をしてselenium.webdriver.support.ui.WebDriverWait完全一致します。次のようにサンプル・コードは次のとおりです。

     セレン輸入webdriverを
      から selenium.webdriver.common.byの輸入によって
      から selenium.webdriver.support.uiの輸入WebDriverWait
      から selenium.webdriver.supportの輸入expected_conditions ECのよう
    
     ドライバ = webdriver.Firefox()
     driver.get(" のhttp:// somedomain / url_that_delays_loading " してみてください
         要素(ドライバ、10 = WebDriverWait (.until)
             EC.presence_of_element_located((By.ID、" myDynamicElement " ))
     最後に
         driver.quit()

     

  3. いくつかの他の条件を待ち:

    • presence_of_element_located:要素がアップロードされています。
    • presence_of_all_emement_located:すべての要素の条件を満たすようにウェブページがアップロードされます。
    • element_to_be_cliable:クリックすることができます要素。

      :その他の条件はを参照してくださいhttp://selenium-python.readthedocs.io/waits.html

ページを切り替えます。

時々窓、多くのサブタブページがあります。この時間は間違いなく切り替えるために必要とされます。seleniumこれはと呼ばれる機能を提供switch_to_window由来することができる特定のページに切り替えるには、スイッチdriver.window_handlesの位置を確認します。次のようにサンプル・コードは次のとおりです。

#は新しいページを開き 
self.driver.execute_script(" window.open( ' " + URL + " ')" #のこの新しいページへのスイッチ 
self.driver.switch_to_window(self.driver.window_handlesを[1])

 

プロキシIPを設定します。

時々 、頻繁にいくつかのページをクロールします。Serverは、爬虫類のあなたのIPアドレスを封止した後にあることがわかります。この時点で、私たちは、プロキシIPアドレスを変更することができます。プロキシIPアドレスを変更、異なるブラウザは異なる実装を持っています。ここにChrome説明する例としてブラウザ:

セレンインポートwebdriverを

オプション =用)(webdriver.ChromeOptions 
options.add_argument(" --proxyサーバ= HTTP://110.73.2.248:8123 " 
driver_path = R " D:\ ProgramApp \ chromedriver \ chromedriver.exe " 
ドライバ = webdriver.Chrome(executable_path = driver_path、chrome_options = オプション)

driver.get(' http://httpbin.org/ip '

 

WebElement要素:

from selenium.webdriver.remote.webelement import WebElement各クラスは、クラスがあなたの要素から抜け出すです。
いくつかの共通の属性があります。

  1. GET_ATTRIBUTE:このタグの属性の値。
  2. screentshot:現在のページのスクリーンショットを取得します。このメソッドは、唯一にすることができdriver上で使用します。
    driverオブジェクトクラスはから継承されますWebElement
    関連するソースコードを読んでください。

おすすめ

転載: www.cnblogs.com/lcy0302/p/10990631.html