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

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

ただいまの
回答率

90.51%

  • Python 3.x

    6399questions

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

AttributeError(?)の解決方法

解決済

回答 1

投稿 編集

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

yusa8421suke

score 5

「独学プログラマー」にて勉強中です。
Googleニュースをスクレイピングするプログラムを同書に沿って実行しましたが、下記のようなエラーが発生しています。
何が問題となっているのでしょうか?
「C:\Users\ユーザー名\AppData\Local\Programs\Python\Python36-32\python.exe:Error while finding module specification for 'ファイル名.py'(AttributeError:module'ファイル名'has no attribute 'path')」

ファイル名が他のモジュール等の名前と被らないようにはしているつもりです。

コードは下記の通りです

import urllib.request
from bs4 import BeautifulSoup

class Scraper:
    def __init__(self,site):
        self.site=site

    def scrape(self):
        r=urllib.request.urlopen(self.site)
        html=r.read()
        parser="html.parser"
        sp=BeautifulSoup(html,parser)
        for tag in sp.find_all("a"):
            url=tag.get("href")
            if url is None:
                continue
            if "html" in url:
                print("\n"+url)

news="https://news.google.com/"
Scraper(news).scrape()


エラー画像

ファイル名は「sctst.py」です

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • hayataka2049

    2018/06/23 16:47

    念のためにファイル名を教えてくれませんか。あと、エラーは全文掲載してください(tracebackも含めて)

    キャンセル

回答 1

checkベストアンサー

+2

[追記 2018/06/24]

Python Doc 1. コマンドラインと環境

sys.path から指定されたモジュール名のモジュールを探し、その内容を main モジュールとして実行します。

引数は module 名なので、拡張子 (.py) を含めてはいけません。モジュール名は有効な Python の絶対モジュール名 (absolute module name) であるべきですが、実装がそれを強制しているとは限りません (例えば、ハイフンを名前に含める事を許可するかもしれません)。

パッケージ名 (名前空間パッケージも含む) でも構いません。通常のモジュールの代わりにパッケージ名が与えられた場合、インタプリタは <pkg>.main を main モジュールとして実行します。この挙動はスクリプト引数として渡されたディレクトリや zip ファイルをインタプリタが処理するのと意図的に同じにしています。

とのことなので

# 画像から文字起こし
$py -m sctst.py


正しくはこうでは

# 画像から文字起こし
$py -m sctst

[追記 2018/06/24]
質問文に反映済み
urllibがimportされてないです。

from bs4 import BeautifulSoup
import urllib

class Scraper:
    def __init__(self,site):
        self.site=site

    def scrape(self):
        r=urllib.request.urlopen(self.site)
        # ^^^^^^
        html=r.read()
        parser="html.parser"
        sp=BeautifulSoup(html,parser)
        for tag in sp.find_all("a"):
            url=tag.get("href")
            if url is None:
                continue
            if "html" in url:
                print("\n"+url)

news="https://news.google.com/"
Scraper(news).scrape()

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/06/24 13:02

    すみません。コード挿入に入力誤りがありました。
    urllib.request はimportしています。

    キャンセル

  • 2018/06/24 13:45

    ちょっと気になったのですが質問文に記載している、コマンドラインからsctst.pyを実行する方法は本に記載していたものをそのまま実行したということですか。

    キャンセル

  • 2018/06/24 14:10

    コードは本に記載されていたものそのままです。
    本には単に「実行する」とだけ記載されていました。
    IDLE対話シェルから実行しても何も出力されなかったため
    質問文画像のとおり、コマンドプロンプトより実行してみました。

    また、ご回答にあるとおり「$py -m sctst」で実行したら、何も出力されませんでした

    キャンセル

  • 2018/06/24 15:08

    手元で動作確認しましたが、多分それが正しい動作かと。本には何が出力されると書いてあるのですか。

    キャンセル

  • 2018/06/24 15:09

    質問文にあるコードは変数urlに文字列htmlが含まれていたらprintするということなのでhtmlが含まれていなかったということになります。

    キャンセル

  • 2018/06/24 15:22

    ありがとうございました。

    本には、urlが出力されるとかいてありました。
    実際に、対象となるurlに含まれる文字列を変数urlに入れてみたら出力されました

    キャンセル

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

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

関連した質問

  • 解決済

    lxml.etree.ParserError: Unicode parsing is not sup...

    前提・実現したいこと この動画を参考に指定したサイトに行き各見出しリンクで使われているそれぞれの単語の頻度を表示する関数を作りたい。 発生している問題・エラーメッセージ

  • 受付中

    AttributeError: 'Series' object has no attribute '...

    Python3を使っております。 数日前からPythonを始め,matplotlibによるグラフ作成を行いました。 今までCしか使ったことがなく、エラーの内容を調べてみてもうま

  • 解決済

    pythonのBeautifulSoupでhtmlの<a>タグから絶対URLだけを抽出する方法は有り...

    pythonのBeautifulSoupを利用し、特定のwebページ内のリンクのURLを全て表示したいのですが、相対パスを使っているwebページだと、相対パスまで表示されてしまいま

  • 解決済

    PythonでWebスクレイピングを行うと文字化けします。

    pythonでWebスクレイピングを行おうとしているのですが、出力が文字化けします。 下記のコードが文字化けしている出力です。sucraping_naver.pyのファイルを実行

  • 解決済

    AttributeError: 'Cifar10Reader' object has no attr...

    AttributeError: 'Cifar10Reader' object has no attribute 'bytestream'  のエラー が出ました。 reader.

  • 解決済

    Pythonにて

    例えばhttp://sample.com/a/b/c/d/e/1?ima=0000&cd=member にブログの1ページ目があるとします。 2ページ目は http://sa

  • 解決済

    BeautifulSoupで画像をダウンロードしたい

    前提・実現したいこと BeautifulSoupでオライリー社の本の表紙をまとめてダウンロードしたい。 Windowsにアナコンダをインストールして使っています。 発生している

  • 解決済

    attributeErrorの解決策

    スクレイピングのプログラムを作っています。 URLからリンク先のURLをexcelにリスト化して入れるものです。 リンク先のURLの抽出までは出来るのですが、excelに出力しよう

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

  • Python 3.x

    6399questions

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