ホームページ  >  記事  >  バックエンド開発  >  PythonのクローラーツールSeleniumの使い方を詳しく解説

PythonのクローラーツールSeleniumの使い方を詳しく解説

高洛峰
高洛峰オリジナル
2017-03-08 11:25:092442ブラウズ

はじめに:

Python を使用して動的ページをクロールする場合、通常の urllib2 は実装できません。たとえば、以下の JD.com ホームページでは、スクロール バーが引き下げられると新しいコンテンツが読み込まれ、urllib2 はこれをクロールできません。コンテンツ この時点で、今日の主人公セレンが必要です。

PythonのクローラーツールSeleniumの使い方を詳しく解説

Selenium は Web アプリケーションをテストするためのツールです。 Selenium テストは、実際のユーザーと同じようにブラウザーで直接実行されます。サポートされているブラウザには、IE、Mozilla Firefox、Mozilla Suite などが含まれます。また、これを使用してページをクロールするのにも非常に便利です。アクセス手順に従うだけで、Cookie やセッションの処理を心配する必要がなく、アカウントとパスワードを入力することもできます。次に、ログイン ボタンをクリックします。バーの上のスクロールの場合は、ブラウザを一番下までスクロールしてページを保存するだけです。上記の関数は、一部のアンチクローラー メカニズムに対処する場合に非常に役立ちます。次に、説明の本文を開始し、ログインを必要とする動的 Web ページのクローリングを実装します。

ケースの実装:

selniumを使用するには、呼び出し元のブラウザを選択し、対応するドライバーをダウンロードする必要があります。デスクトップバージョンの場合は、Chrome、FireFoxなどを選択でき、サーバー上でPhantomJSを使用できます。変更はブラウザーで確認されるため、通常はデスクトップ版の Chrome でデバッグした後、ブラウザーを PhantomJS に変更し、サーバーにアップロードして実行できます。デモのために PhantomJS を直接使用します

まず、モジュールをインポートします:

 from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
 from selenium import webdriver

次に、ロードされた Web ページのいくつかの属性をパラメータで指定できます:

cap = webdriver.DesiredCapabilities.PHANTOMJS
cap["phantomjs.page.settings.resourceTimeout"] = 180
cap["phantomjs.page.settings.loadImages"] = False

driver = webdriver.PhantomJS(executable_path="/home/gaorong/phantomjs-2.1.1-linux-x86_64/bin/phantomjs", desired_capabilities=cap)

PhantomJS は上記で初期化され、ブラウザのパスが設定されます。loading 属性は、リソースの読み込みを選択し、画像の読み込みを行わないようにします (Web ページのテキストのみを考慮します)。ここで他の設定を選択することもできます。

いくつかのプロパティを設定し、Web ページをダウンロードします

driver.set_page_load_timeout(180)     
driver.get('http://www.php.cn/')
time.sleep(5)
driver.save_screenshot('./login.png')   #为便于调试,保存网页的截图

サーバー側での実行時にはエラーが避けられないため、save_screenshot を使用して現在の Web ページをデバッグ用に保存できます。

次のステップは、アカウントとパスワードを入力してログインし、後のリクエストのために Web サイトの Cookie を取得することです。

#输入username和password 
driver.find_element_by_xpath("/html/body/div[1]/div[1]/login/div[2]/div/form/input[1]").send_keys('*****')   
time.sleep(1)
print 'input user success!!!'

driver.find_element_by_xpath("/html/body/div[1]/div[1]/login/div[2]/div/form/input[2]").send_keys('****')
time.sleep(1)
print 'input password success!!!'

driver.find_element_by_xpath("/html/body/div[1]/div[1]/login/div[2]/div/form/button").click()
time.sleep(5)

上記のコードは、find_element_by_xpathを使用して入力ボックスの位置を取得し、アカウントとパスワードを入力してログインボタンをクリックするのが非常に便利であることがわかります。自動的に次のページにジャンプします。数秒間スリープして待つだけです。

クロールする必要がある Web ページ情報は特定の要素内にあるため、この要素が表示されるかどうかを判断する必要があります:

try:
     element = WebDriverWait(driver, 10).until(
         EC.presence_of_element_located((By.CLASS_NAME, 'pulses'))
     )
     print 'find element!!!'        
 except:
     print 'not find element!!!'
     print traceback.format_exc()
     driver.quit()

上記は、クラス 'pulse' の要素が表示されるかどうかを判断します。 10 秒、まだ表示されていない場合、selenum は TimeoutError エラーを引き起こします。

基本的な初期化が上記で実行されました。その後、JD.com などの動的コンテンツを処理する必要があります。そのため、ドロップダウン スクロール バーを実装する必要があります。 :

print 'begin scroll to get info page...'
t1 = time.time()
n = 60   #这里可以控制网页滚动距离
for i in range(1,n+1):
    s = "window.scrollTo(0,document.body.scrollHeight/{0}*{1});".format(n,i)
    #输出滚动位置,网页大小,和时间
    print s, len(driver.page_source),time.time()-t1
    driver.execute_script(s)
    time.sleep(2)

ここで、 driver.page_source は Web ページのテキストを取得するためのものです。スクロールが完了したら、それを呼び出してファイルに書き込むことができます。これでプログラムロジックは完成です。

上級:

selenim を使用すると、人間が Web を閲覧するのと同等であるため、一般的なクローラ対策戦略に対処できますが、検証コードには追加の処理が必要になるため、アクセス速度が速すぎることはできません。 , 結局のところ、それが遅すぎる場合は、必要に応じてリクエストライブラリを使用して操作できます。

ここでは、参照できる 2 つのブログを紹介します: Python Crawler Tool Five: Selenium の使用法と共通関数


以上がPythonのクローラーツールSeleniumの使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。