質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

2693閲覧

Pythonスクレイピング。requests.get()がうまくいきません。

退会済みユーザー

退会済みユーザー

総合スコア0

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/10/26 05:52

このサイト(機械学習を使って東京23区のお買い得賃貸物件を探してみた 〜スクレイピング編〜)を参考に、pythonのスクレイピングを練習している初学者です。

このサイトでは、SUUMOの東京都足立区の賃貸情報をまとめてスクレイピングし、データ分析して、どの物件が一番お得かを明らかにするプログラムが紹介されています。

このサイトを参考に、requests, BeautifulSoupを用いて写経をしているのですが、上手くいきません。
実行環境:python 3.6.7, beautifulsoup4:4.6.3, requests:2.20.0

次のサイト⇒【SUUMO】東京都足立区の賃貸(賃貸マンション・アパート)住宅のお部屋探し物件情報 の、titleをrequests, BeautifulSoupを使って取得しようとするも、想定されたものとは違うものが返ってきます(ケース1)。
また、URLパラメータを別途指定するとうまくいくという記事を見たような気がしたので試してみましたが、同じ結果になりました(ケース2)。

コードを見てください。

python

1from bs4 import BeautifulSoup 2import requests 3 4# ケース1 URLパラメータも含める 5url1 = 'http://suumo.jp/jj/chintai/ichiran/FR301FC001/?ar=030&bs=040&ta=13&sc=13121&cb=0.0&ct=9999999&et=9999999&cn=9999999&mb=0&mt=9999999&shkr1=03&shkr2=03&shkr3=03&shkr4=03&fw2=&srch_navi=1' 6 7# ケース2 URLパラメータを別途指定する 8url2 = 'http://suumo.jp/jj/chintai/ichiran/FR301FC001/' 9params = {"ar":"030", "bs":"040", "ta":"13", "sc":"13121", "cb":"0.0", "ct":"9999999", "et":"9999999", "cn":"9999999", "mb":"0", "mt":"9999999", "shkr1":"03", "shkr2":"03", "shkr3":"03", "shkr4":"03", "fw2":"", "srch_navi":"1"} 10 11# 両方のurlに対し、requests,BeautifulSoupの処理を行う。 12result1 = requests.get(url1) 13result2 = requests.get(url2, params=params) 14soup1 = BeautifulSoup(result1.content, "html.parser") 15soup2 = BeautifulSoup(result2.content, "html.parser") 16 17# 出力する。本来、"【SUUMO】東京都足立区の賃貸(賃貸マンション・アパート)住宅のお部屋探し物件情報"と出て欲しい。 18print(soup1.title.string) 19# => "【SUUMO】 ページを表示できません。" 20print(soup2.title.string) 21# => "【SUUMO】 ページを表示できません。" 22

以上のような症状です。なぜ、「ページを表示できません」となってしまうのか、見当もつきません。
また、そのためか、サイトで紹介されていたコードをコピペしてもエラーが出てしまいます。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiitoi

2018/10/26 06:27

ブラウザでアクセスしたときと違い、503ページが表示されるようなので、なんらかの基準で弾かれてるっぽいです。ユーザーエージェントを追加したりしましたが、駄目でした。
退会済みユーザー

退会済みユーザー

2018/10/26 06:33

返信ありがとうございます!そういうことなんですね!!そうすると、この方法でSUUMOのサイトをスクレイピングするのは難しいという理解で正しいですか?
tiitoi

2018/10/26 06:38

summo 側を普通のブラウザでアクセスしていると誤認させることができれば、取得できると思いますが、それをなにで判断しているのかがちょっとわからないので試行錯誤が必要ですね。試しに、Chrome でアクセスしたときの HTTP header の中身をコピペしたりはしたのですが、それでは駄目でした。。
退会済みユーザー

退会済みユーザー

2018/10/26 06:41

なるほど!確かに、普通にブラウジングしている風でリクエストできれば可能になりますね。いろいろやって頂き大変ありがとうございました!とても参考になりました!!!
guest

回答1

0

ベストアンサー

なぜ、「ページを表示できません」となってしまうのか

取得したHTMLのタイトルが「【SUUMO】 ページを表示できません。」となっているから、としか言いようがないのですが、今現在実行しても同じ状態なのですか?

追記(2018-10-26 15:40)

単純にUser-Agentをチェックしてアクセス拒否されてますね。

params = {"ar":"030", "bs":"040", "ta":"13", "sc":"13121", "cb":"0.0", "ct":"9999999", "et":"9999999", "cn":"9999999", "mb":"0", "mt":"9999999", "shkr1":"03", "shkr2":"03", "shkr3":"03", "shkr4":"03", "fw2":"", "srch_navi":"1"} headers = {'user-agent': "Mozilla/5.0"} r = requests.get('http://suumo.jp/jj/chintai/ichiran/FR301FC001/', params=params, headers=headers)

投稿2018/10/26 06:25

編集2018/10/26 06:41
mather

総合スコア6753

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/10/26 06:30

返信ありがとうございます!!残念ながら現在もそのままです。。 ブラウザ上でソースコードを確認すると、11行目で<title>【SUUMO】東京都足立区の賃貸(賃貸マンション・アパート)住宅のお部屋探し物件情報</title>となっているので、僕の書いたプログラムでも、titleタグ内のテキストが出力されるものだと思っていましたが上手くいきません。。
mather

2018/10/26 06:41

追記しました。
退会済みユーザー

退会済みユーザー

2018/10/26 06:46

で、できました!!!!!本当にありがとうございます!!! headersってこういうときに使うんですね。。素早い対応本当に感謝いたします!また別の機会にもよろしくお願いいたします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問