12

次の Web ページを取得しようとしています。

import urllib
urllib.urlopen("http://www.gallimard-jeunesse.fr/searchjeunesse/advanced/(order)/author?catalog[0]=1&SearchAction=1").read()

結果は、たとえば Google Chrome を使用して Web ページのソース コードを調べたときに表示されるものと一致しません。

なぜこれが起こるのか、問題を克服するためにコードを改善するにはどうすればよいか教えていただけますか?

ご協力ありがとうございました。

4

5 に答える 5

10

あなたが得てurlopenいるのは、javascriptが実行されていないことを意味する生のWebページですcssは使用されていません。Chrome(または他のブラウザ)から得られるのは、実行可能なjavascript(HTMLを変更する可能性がある)、cssレンダリングなどを含む最終的なWebページです。これらはすべてurlopen...

したがって、違い、これが明確であることを願っています

于 2012-09-17T20:51:13.877 に答える
7

You can use Selenium with Firefox for solving the issue, but it may not be suitable in many cases as the browser pops up every-time you run the code. Another idea is to use a headless broswer like PhantomJS.

The best way for this is to use the mechanize library. Install mechanize via pip.

pip install mechanize

Then you can use the following code:

import mechanize 

mb = mechanize.Browser()
mb.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] 
mb.set_handle_robots(False)
url = "http://www.gallimard-jeunesse.fr/searchjeunesse/advanced/(order)/author?catalog[0]=1&SearchAction=1"
response = mb.open(url).read()
print response

It also provides option for sleep and executing scripts. You can read them in the documentation.

于 2014-01-26T05:07:26.960 に答える
3

また、一部のWebサイトには、いわゆるブラウザスイッチがあり、さまざまなブラウザを使用すると、さまざまなソースが表示される可能性があります(たとえば、モバイルブラウザのライトバージョンを表示します)。

User-Agentを「Mozilla/5.0(Windows NT 6.1; WOW64)AppleWebKit / 537.1(KHTML、Geckoなど)」のようなものに変更する方法については、http: //www.diveintopython.net/http_web_services/user_agent.htmlを参照してください。 Chrome / 21.0.1180.89 Safari / 537.1 "(実際には私のユーザーエージェントです)。

于 2012-09-17T21:01:44.777 に答える