2016-03-28 36 views
1

私は現在、人気のあるジョークのWebサイトを削っています。 1つの例は、jokes.cc.comと呼ばれるウェブサイトです。ウェブサイトにアクセスする場合は、ページの左側にあるの「ランダムジョークを取得する」ボタンの上にカーソルを置くと、リダイレクトされるリンクはjokes.cc.com/#になります。レンダリング後のWebページのHTMLコンテンツをPythonで完成させる方法

しばらく待つと、実際の冗談を表示するウェブサイト内の適切なリンクに変わります。それはjokes.cc.com/*legit joke link*に変更されます。

ページのHTMLを解析する場合は、<href>店舗リンクページはあなたをんリダイレクトしたいランダムなジョークにclass=random_linkとのリンク(<a>)があることがわかります。ページが完全に読み込まれたら、これをチェックすることができます。基本的に、「#」は正当なリンクに置き換えられます。

ここまでは、私が静的なウェブサイトで行ったようにHTMLを削るためのコードです。

import urllib 
from bs4 import BeautifulSoup 

urlToRead = "http://jokes.cc.com"; 
handle = urllib.urlopen(urlToRead) 
htmlGunk = handle.read() 
soup = BeautifulSoup(htmlGunk, "html.parser") 
# Find out the exact position of the joke in the page 
print soup.findAll('a', {'class':'random_link'})[0] 

出力:#

私は、ページが完全にレンダリングされていないことを実現するために来ているので、これが予想される出力である私はBeautifulSoupライブラリを使用していました。

しばらく待ってから、またはレンダリングが完了した後で、ページを削り取るにはどうすればよいですか。 などの外部ライブラリを使用する必要がありますか。機械化?私はそれを行う方法がわからないので、どんなヘルプ/ガイダンスもありがとうございます

EDIT:最終的にPhantomJSとPythonのSeleniumを使用して問題を解決することができました。レンダリングが完了した後にページを取得するコードを次に示します。

from bs4 import BeautifulSoup 
from selenium import webdriver 


driver = webdriver.PhantomJS() #selenium for PhantomJS 
driver.get('http://jokes.cc.com/') 
soupFromJokesCC = BeautifulSoup(driver.page_source) #fetch HTML source code after rendering 
# locate the link in HTML 
randomJokeLink = soupFromJokesCC.findAll('div', {'id':'random_joke'})[0].findAll('a')[0]['href'] 
# now go to that page and scrape the joke from there 
print randomJokeLink #It works :D 

答えて

1

あなたが行っているデータは、ページの読み込み時に動的に実行されるJavaScriptによって生成されます。 BeautifulSoupにはJavaScriptエンジンがないので、どれくらい待ってもリンクは決して変更されません。 JavaScriptをスクラップして理解できるPythonライブラリがありますが、おそらくウェブサイト上のJSがどのように実際に動作するかを掘り下げて調べるのがベストな方法です。たとえばジョークのデータフィードがランダムなジョークから引き出されている場合、Pythonが非常に簡単に解析できるJSONなどの形式になっている可能性があります。これにより、あなたのアプリケーションは完全に吹き飛ばされたスクリプトエンジンを含むよりはるかに軽量になります。

+0

*セレン*ブラウザの自動化は行く方法ですか? – bholagabbar

+0

N.B.私は決してセレンを使用したことはありませんが、それはあなたのプロジェクトの範囲に依存します。ジョークを表示するアプリケーションを作成する場合は、Webブラウザを自動化するのは理想的ではないでしょう。それはあなたのユーザーがブラウザをインストールして開いている必要があります、そして、あなたはそのブラウザに多くの仕事を負担させるでしょう。しかし、JavaScriptの仕組みを掘り下げてみると、JavaScriptのことを考えなくても、アプリ内での振る舞いを再現し、ジョークを掻き立てることができます。 –

+0

ヘッドレスブラウザのソートはどうですか? – bholagabbar

関連する問題