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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

3回答

2680閲覧

HTMLparserを使ったコードのエラー

yoyoyo

総合スコア14

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2017/01/30 22:54

###前提・実現したいこと
コードは以下のurlのをそのままお借りしました。
http://d.hatena.ne.jp/ichhi/20111015/1318699010
python2.7です。
実行するとしばらくした後にエラーがでます。
エラーの内容を調べてみましたがよくわからなかったので教えていただきたいです。
知りたいことは、
自分で直せるエラーなのかどうか
直せるとしたらその方法
です。
よろしくお願いします。

###発生している問題・エラーメッセージ

macbook-pro-3:python yoyoyo$ python try.py Traceback (most recent call last): File "try.py", line 27, in <module> main() File "try.py", line 20, in main response = urllib2.urlopen(url) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 154, in urlopen return opener.open(url, data, timeout) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 431, in open response = self._open(req, data) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 449, in _open '_open', req) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 409, in _call_chain result = func(*args) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1227, in http_open return self.do_open(httplib.HTTPConnection, req) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1197, in do_open raise URLError(err) urllib2.URLError: <urlopen error [Errno 1] Operation not permitted>

###該当のソースコード

python2.7

1from HTMLParser import HTMLParser 2import urllib2 3 4class GetTitle(HTMLParser): 5 def __init__(self): 6 HTMLParser.__init__(self) 7 self.title_flag = False 8 9 def handle_starttag(self, tag, attrs): 10 if tag == 'title': 11 self.title_flag = True 12 13 def handle_data(self, data): 14 if self.title_flag: 15 self.title = data 16 self.title_flag = False 17 18def main(): 19 url = 'http://twitter.com' 20 response = urllib2.urlopen(url) 21 gt = GetTitle() 22 gt.feed(response.read()) 23 gt.close() 24 print '%s - %s' % (url, gt.title) 25 26if __name__ == '__main__': 27 main() 28

###試したこと
課題に対してアプローチしたことを記載してください
エラー内容をググってみました。
関係していそうだと思ったのは、port、proxyなど。
全体像が見えませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

granfa_yuzo

2017/01/31 00:19

urllib2.URLError: <urlopen error [Errno 1] Operation not permitted>とあるので、オープンできていないみたいですね。proxyが関係あるかもと書いてありますけど、PCがあるネット環境は、どうなってますか?
yoyoyo

2017/01/31 00:23

初心者なので申し訳ありませんが、何を調べて載せればよいでしょうか。インターネット環境としては、複数のwifiで試しましたが全て同じ結果になってしまいました。
masaya_ohashi

2017/01/31 01:25

あなたの試した環境とはどこですか?例えば会社の中である、学校の中である、家の中である、パソコンは会社のものである、学校のものである、私用のものである、そのあたりについて詳しく書いてください。
masaya_ohashi

2017/01/31 01:27

例えば学校だと、教育委員会のプロキシの防御により、直接外部へのアクセスが禁止されているパターンがあります。その場合、Pythonに正しいプロキシ情報を与えないと接続ができないです。
yoyoyo

2017/01/31 01:29

学校の中、家の中、ケータイ回線の三つです。家はニューロ光です。ケータイはドコモです。よろしくお願いします。
masaya_ohashi

2017/01/31 01:34

あなたのパソコンは私物ですか?学校の貸与品ですか?それと、あなたがそのパソコンを起動したときに、アカウントが複数表示されますか?
yoyoyo

2017/01/31 01:41

私物です。複数表示されます。左側に自分のアカウント、右側にゲストユーザーです。よろしくお願いします
yoyoyo

2017/01/31 02:00 編集

上記のurlを入れたら出力できました!何が違ったのでしょうか?セキュリティソフトはnortonが入っています。https://www.google.co.jp/ - Google sudo なしでもgoogleのurlは出力できました。
masaya_ohashi

2017/01/31 02:08

回答に追記しておきました。
guest

回答3

0

ベストアンサー

sh

1sudo python try.py

を試してみてください。多分パスワードを要求されますが、あなたが普段Macを起動するときに使うパスワードでOKです。not permittedということは「権限がない」ということです。sudoをつけてパスワード入力させることで、このコマンドを実行している人間が権限を持った人間であることを認識し、そのへんの制限を受けずに処理が実行できるようになります。もし違う理由で制限されていたらこれでもだめかもしれませんが…

コメントとかの総括

TwitterはAPIを提供しているので、おそらくブラウザ外から直接TwitterのURLを叩くことを禁止しているのかもしれません。APIを提供している意味がなくなりますからね。Googleが接続できて、Twitterができないのはそれが原因でしょう。Twitterの投稿情報が欲しければ、Twitter APIで検索して出て来る情報を元に組み直したほうがよいかもしれません。

投稿2017/01/31 01:45

編集2017/01/31 02:08
masaya_ohashi

総合スコア9206

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

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

yoyoyo

2017/01/31 01:55

実行は出来ましたが、少しエラー内容が変わってエラーが出てきました。 File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1197, in do_open raise URLError(err) urllib2.URLError: <urlopen error [Errno 8] nodename nor servname provided, or not known>
masaya_ohashi

2017/01/31 02:01

セキュリティソフトを一時的にOFFにしてやってみてください。
yoyoyo

2017/01/31 02:11

セキュリティソフトをoffにしたらうまくいきました!ありがとうございます!!この場合はセキュリティソフトの何が悪かったのでしょうか?ファイアウォールをoffにしたら解決できたのですが...
masaya_ohashi

2017/01/31 02:19

うーむ…推測も外れてしまったようですね。GoogleとTwitterの証明書になにか違いがあるかもしれませんが、詳しくは不明です。危ないのでファイアウォールはONに戻しておいてくださいね。TwitterAPIを使ってもだめだったらまた質問してください。
yoyoyo

2017/01/31 02:52

なるほど、、、ありがとうございました!
guest

0

エラー文言を見る限りURLそのものに問題があるように見えます。
URLをhttps://twitter.com/に変えてみてはどうでしょう。twitterにhttpでアクセスしてもhttpsにリダイレクトされるので、HTTPSプロトコル以外は受け付けないのかもしれません。

投稿2017/01/31 00:54

masaya_ohashi

総合スコア9206

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

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

yoyoyo

2017/01/31 01:05

urlのみ変えてみましたが同じようにエラーが出てきてしまいました... urllib2.URLError: <urlopen error [Errno 1] Operation not permitted>
guest

0

根本的解決にはならないかもしれませんが、
追加、変更してみてください。

ソースコードの先頭に追加
import urllib.request

一部変更
def main():
url = 'http://twitter.com'
request = urllib.request.Request(url) ※
response = urllib.request.urlopen(request) ※
gt = GetTitle()
gt.feed(response.read())
gt.close()
print '%s - %s' % (url, gt.title)

変更前と同じエラーが出たら、ソースコード以外に原因があると思います。

投稿2017/01/31 00:27

granfa_yuzo

総合スコア356

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

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

yoyoyo

2017/01/31 01:08 編集

Urllib.requestがインポートできないのですが、これは何か操作が必要ですか? Urllib 自体は入っているようです。 import urllib としてとりあえずインポートしましたがrequestアトリビュートを持ってないそうです。 request = urllib.request.Request(url) AttributeError: 'module' object has no attribute 'request'
granfa_yuzo

2017/01/31 01:06

ごめんなさい。私の環境がpython3.5.2だったので、そのまま、記述してしまいました。pthon2.7で動く用調整しますので、お時間ください。
yoyoyo

2017/01/31 02:13

解決しました!回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問