5

これと同じ手法を使用する前に、Web サイトをスクレイピングしていました。しかし、このウェブサイトではうまくいかないようです。

import urllib2
from BeautifulSoup import BeautifulSoup
url = "http://www.weatheronline.co.uk/weather/maps/current?LANG=en&DATE=1354104000&CONT=euro&LAND=UK&KEY=UK&SORT=1&INT=06&TYP=sonne&ART=tabelle&RUBRIK=akt&R=310&CEL=C"
page=urllib2.urlopen(url).read()
soup = BeautifulSoup(page)
print soup

出力にはWebページのコンテンツが含まれているはずですが、代わりにこれを取得しています:

GIF89a (ここではコピーできない記号もいくつか続きます)

問題の内容と、どのように進めればよいかについてのアイデア。

4

2 に答える 2

4

しかし、そのようなURLにアクセスするgifを取得している理由を知りたいのですが、ブラウザからアクセスすると、Webサイトが完全に取得されます。

彼らは頭が良く、自分の Web サイトに Web ブラウザ以外からアクセスされることを望んでいないからです。必要なことは、ヘッダーに User-agent を追加して、既知のブラウザーを偽造することです。これは動作する修正例です

>>> import urllib2
>>> opener = urllib2.build_opener()
>>> opener.addheaders = [('User-agent', 'Mozilla/5.0')]
>>> url = "http://www.weatheronline.co.uk/weather/maps/current?LANG=en&DATE=1354104000&CONT=euro&LAND=UK&KEY=UK&SORT=1&INT=06&TYP=sonne&ART=tabelle&RUBRIK=akt&R=310&CEL=C"
>>> response = opener.open(url)
>>> page = response.read()
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup(page)
于 2012-12-05T10:15:33.477 に答える
0

アクセスしている URL が Web ページではなく、GIF 画像であることを意味します。実際、スクリプトを実行して「ページ」をファイルに保存すると、1x1 ピクセルの白 (または透明) の GIF が得られます。

実際の Web ブラウザーでそれが得られない理由は、実際には、スクレイピングを望んでいないためかもしれません。

利用規約から:「あなたは、あなた自身の個人的、非商業的使用を除いて、サイトのコンテンツをコピー、複製、再発行、ダウンロード、投稿、放送、送信、またはその他の方法で使用することはできません。」

いくつかの作業で Web ブラウザーを偽装することもできますが、代わりに WeatherOnline に相談することをお勧めします。彼らはあなたにデータの支払いを求めていますが、そうすれば、スクリーンスクレイピングの代わりに使用できる優れた API を確実に手に入れることができます。

于 2012-12-05T09:56:24.433 に答える