10

私は Web スクレイパーの作成を学んでおり、個人的なプロジェクトのためにトリップアドバイザーをスクレイピングして、urllib2 を使用して HTML を取得したいと考えています。ただし、以下のコードを使用すると、ページがリダイレクトするのに1秒かかるように見えるため、返されるhtmlが正しくないという問題が発生しています(URLにアクセスして確認できます)-代わりにコードを取得します最初に簡単に表示されるページから。

Web サイトのコンテンツを取得する前に、ページの読み込み/リダイレクトが完全に完了していることを確認するために設定する動作またはパラメーターはありますか?

import urllib2
from bs4 import BeautifulSoup

bostonPage = urllib2.urlopen("http://www.tripadvisor.com/HACSearch?geo=34438#02,1342106684473,rad:S0,sponsors:ABEST_WESTERN,style:Szff_6")
soup = BeautifulSoup(bostonPage)
print soup.prettify()

編集:答えは徹底的ですが、最終的に私の問題を解決したのはこれでした: https://stackoverflow.com/a/3210737/1157283

4

1 に答える 1

6

問題をリダイレクトではないことを再確認するのは、ページが JavaScript を使用してコンテンツを変更することですurllib2が、JSエンジンがなくGETS、データだけです。ブラウザで JavaScript を無効にすると、urllib2返されるものと基本的に同じコンテンツが読み込まれることに注意してください。

import urllib2
from BeautifulSoup import BeautifulSoup

bostonPage = urllib2.urlopen("http://www.tripadvisor.com/HACSearch?geo=34438#02,1342106684473,rad:S0,sponsors:ABEST_WESTERN,style:Szff_6")
soup = BeautifulSoup(bostonPage)
open('test.html', 'w').write(soup.read())

test.htmlブラウザで JS を無効にします。Firefox コンテンツで最も簡単です -> enable javascript のチェックを外すと、同一の結果セットが生成されます。

では、どうしたらよいでしょうか。まず、サイトが API を提供しているかどうかを確認する必要があります

旅行/ホテル API の? いくつかの制限はありますが、そうかもしれません。

しかし、まだスクレイピングする必要がある場合は、JS を使用してselenium http://seleniumhq.org/を使用できます。これは主にテストに使用されますが、簡単で、かなり優れたドキュメントがあります。

また、Javascript が有効になっているスクレイピング Web サイトを見つけましたか? そしてこれhttp://grep.codeconsult.ch/2007/02/24/crowbar-scrape-javascript-generated-pages-via-gecko-and-rest/

それが役立つことを願っています。

補足として:

>>> import urllib2
>>> from bs4 import BeautifulSoup
>>> 
>>> bostonPage = urllib2.urlopen("http://www.tripadvisor.com/HACSearch?geo=34438#02,1342106684473,rad:S0,sponsors:ABEST_WESTERN,style:Szff_6")
>>> value = bostonPage.read()
>>> soup = BeautifulSoup(value)
>>> open('test.html', 'w').write(value)
于 2012-07-12T21:03:16.360 に答える