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

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

ただいまの
回答率

90.32%

  • Python 2.7

    1344questions

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

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

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 896

yoyoyo

score 8

前提・実現したいこと

コードは以下の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>

該当のソースコード

from HTMLParser import HTMLParser
import urllib2

class GetTitle(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.title_flag = False

    def handle_starttag(self, tag, attrs):
        if tag == 'title':
            self.title_flag = True

    def handle_data(self, data):
        if self.title_flag:
            self.title = data
            self.title_flag = False

def main():
    url = 'http://twitter.com'
    response = urllib2.urlopen(url)
    gt = GetTitle()
    gt.feed(response.read())
    gt.close()
    print '%s - %s' % (url, gt.title)

if __name__ == '__main__':
    main()

試したこと

課題に対してアプローチしたことを記載してください
エラー内容をググってみました。
関係していそうだと思ったのは、port、proxyなど。
全体像が見えませんでした。

補足情報(言語/FW/ツール等のバージョンなど)

より詳細な情報

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • masaya_ohashi

    2017/01/31 10:47

    セキュリティソフトはなにか入っていますか?https://www.google.co.jp/に接続しても同じエラーが起きますか?

    キャンセル

  • yoyoyo

    2017/01/31 10:58 編集

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

    sudo なしでもgoogleのurlは出力できました。

    キャンセル

  • masaya_ohashi

    2017/01/31 11:08

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

    キャンセル

回答 3

checkベストアンサー

0

sudo python try.py


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

 コメントとかの総括

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/31 10: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>

    キャンセル

  • 2017/01/31 11:01

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

    キャンセル

  • 2017/01/31 11:11

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

    キャンセル

  • 2017/01/31 11:19

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

    キャンセル

  • 2017/01/31 11:52

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

    キャンセル

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 09:50 編集

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

    キャンセル

  • 2017/01/31 10:06

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

    キャンセル

  • 2017/01/31 11:13

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

    キャンセル

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/31 10:05

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

    キャンセル

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

  • ただいまの回答率 90.32%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Python 2.7

    1344questions

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