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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

4578閲覧

【Pythonクローリング&スクレイピング】でつまづきました

yukinkosan

総合スコア5

スクレイピング

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/07/28 09:19

編集2018/07/28 13:10

こちらの本でつまづきました

![イメージ説明

ページ内容
2.4.143f = urlopen('https://gihyo.jp/dp')の実行結果

■前提条件
環境は本のAppendixを使い準備しました。

■実行結果

>>> from urllib.request import urlopen >>> f=urlopen('https://gihyo.jp/dp') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python3.4/urllib/request.py", line 161, in urlopen return opener.open(url, data, timeout) File "/usr/lib/python3.4/urllib/request.py", line 469, in open response = meth(req, response) File "/usr/lib/python3.4/urllib/request.py", line 579, in http_response 'http', request, response, code, msg, hdrs) File "/usr/lib/python3.4/urllib/request.py", line 507, in error return self._call_chain(*args) File "/usr/lib/python3.4/urllib/request.py", line 441, in _call_chain result = func(*args) File "/usr/lib/python3.4/urllib/request.py", line 587, in http_error_default raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 403: Forbidden

■知りたい事
0. なぜこのような状態になるのか
0. エラーを起こさず実行するための解決策

よろしくお願いします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

こちらにWebサイトの変更等により動作しなくなった箇所の修正情報等が載っているようです。内容の通り「https://gihyo.jp/dp」にアクセスできなくなったので「**http://sample.scraping-book.com/dp**」に変更してくださいとのことです。
Pythonクローリング&スクレイピング ―データ収集・解析のための実践開発ガイド― サポートページ

P.43, 2.4以降のgihyo.jp/dpにアクセスする操作が動作しない

gihyo.jp側の変更によりurllibによって「https://gihyo.jp/dp」にアクセスできなくなりました。
書籍中で案内している「https://gihyo.jp/dp」のURLをすべて,サンプルサイトの「http://sample.scraping-book.com/dp」に変更してください。

python

1 >>> from urllib.request import urlopen 2 >>> f = urlopen('http://sample.scraping-book.com/dp')

投稿2018/07/30 09:47

編集2018/07/30 13:20
wakame

総合スコア1170

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

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

yukinkosan

2018/07/31 16:00

wakame様 ご回答ありがとうございます! サポートページに答えがあったんですね。完全に抜けていました。 問題無く実行できることを確認できました。 ありがとうございます!
guest

0

403は相手のサーバがアクセスを拒否したときのステータスコードです。

理由はいろいろ考えられますが、今回の場合、その技術評論社のサイトがurllibからのアクセスを制限しているようです(具体的にどんな制限なのかはよくわかりませんが・・・)。

ユーザーエージェントを偽装して、適当な他のブラウザに見せかけるといけます。

python

1>>> import urllib 2>>> r = urllib.request.Request('https://gihyo.jp/dp', headers={'User-Agent': 'Mozilla/5.0'}) 3>>> f = urllib.request.urlopen(r)

技術評論社の本で技術評論社のサイトなのに、本が出てからサンプル通り動かなく設定してくれた訳で、ちょっとひどい話ではあります(それとも、この本が出たせいでマナーの悪いスクレイピングが殺到したとか?)。


参考:
urlopenを使うときのエラー回避 | mrsekutの備忘録

Pythonのurllib.requestのユーザーエージェントの変更 - みーのぺーじ

投稿2018/07/29 11:15

hayataka2049

総合スコア30933

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

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

yukinkosan

2018/07/31 16:04

hayataka2049様 ご回答ありがとうございます! このような方法で実行することもできるのですね。 機械的にアクセスしているようにサーバーに見せない工夫なんですね。勉強になりました。 出版社が公式的に回答を出しているということもあって、wakame様をベストアンサーに選ばせていただきました。 ありがとうございました。
guest

0

手元に本が無いので正確な事は分かりませんが、、、

f = urlopen('https://gihyo.jp.dp')

このようなアドレス (gihyo.jp.dp) はありません。そのためのエラーですね。

urllib.error.HTTPError: HTTP Error 403: Forbidden

実在のアドレスを使えば、問題無いと思いますが、その後で何をしようとしているか不明なので、適当なアドレスだと問題になるかも。

投稿2018/07/28 09:48

pepperleaf

総合スコア6383

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

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

KojiDoi

2018/07/28 10:12

「実行結果」を見る限り、これは単に質問文を書き間違えているだけですね。
yukinkosan

2018/07/28 13:05

>KojiDoi様 フォローありがとうございます。 間違いに気づきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問