@ayasaka

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

webスクレイピングをPythonanywhereで実行したところエラーが出た

解決したいこと

Pythonを使って、Pythonanywhereというサーバーを使ってwebスクレイピングで天気予報を
LINEに伝えるプログラムを作っています。
解決方法を教えてください。

発生している問題・エラー

^CTraceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/bin/pythonanywhere_runner.py", line 30, in _pa_run
    exec(code, new_variables)
  File "/home/ayasaka/main.py", line 10, in <module>
    res = requests.get(Request_URL_weather + '/city/' + City_ID)
  File "/usr/local/lib/python3.9/site-packages/requests/api.py", line 76, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/requests/api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
^CTraceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/bin/pythonanywhere_runner.py", line 30, in _pa_run
    exec(code, new_variables)
  File "/home/ayasaka/main.py", line 10, in <module>
    res = requests.get(Request_URL_weather + '/city/' + City_ID)
  File "/usr/local/lib/python3.9/site-packages/requests/api.py", line 76, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/requests/api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/requests/adapters.py", line 439, in send
    resp = conn.urlopen(
  File "/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 699, in urlopen
    httplib_response = self._make_request(
  File "/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 445, in _make_request
    six.raise_from(e, None)

該当するソースコード

import requests as requests
import schedule

Request_URL_weather = 'https://weather.tsukumijima.net/api/forecast'
Request_URL_LINE = 'https://notify-api.line.me/api/notify'

City_ID = '110020'
Token = 'APIキーが入っています。'

res = requests.get(Request_URL_weather + '/city/' + City_ID)

自分で試したこと

ローカル環境でソースコードの実行してみたところ、うまくいきましたが、
Pythonanywhereではうまくいきません。

0 likes

1Answer

Traceback (most recent call last):よりも
更に上にエラーメッセージは何か出ていませんか?

/bin/pythonanywhere_runner.pyからmain.py
呼び出す記述が間違っている、とか
そもそも、PythonanywhereからRequest_URL_weather + '/city/' + City_ID
アクセスする許可が無いとか、その辺はどうでしょうか。

0Like

Comments

  1. @ayasaka

    Questioner

    、PythonanywhereからRequest_URL_weather + '/city/' + City_IDに
    アクセスする許可が無いということですが、どの様に出せばよいのでしょうか?
    初心者であまりわからないので、お願いします。
  2. とりあえず、「自分で試したこと」とある通り、折角学習しているのなら
    質問丸投げではなく「公式ドキュメント」「分からない単語」などで
    調べたりしてみましょう。(問題解決能力の向上に繋がります)

    軽く検索してみたら、以下の情報が出てきましたが、こちらが
    該当するのではないでしょうか。
    (質問者の方が有料アカウントなのか無料アカウントなのか記載がなく
    分からないので推測ですが)

    ■公式ドキュメント
    https://help.pythonanywhere.com/pages/
    https://help.pythonanywhere.com/pages/403ForbiddenError

    ■pythonanywhereのUpgradeをした。(個人記事)
    https://note.com/masato1230/n/nd351e73cae32


    もしくは、アクセスしようとしているサイト側が
    ホワイトリストによる許可設定などをしている場合は基本無理です。

    また、捕捉ですが、
    スクレイピングをする際には、アタックになりかねないので
    「対象のサイトが利用規約でスクレイピングを許可しているか」、
    「サーバー負荷を考慮しているか」、「robots.txt」などを確認してください。
    (今回はAPI利用とのことなので、https://weather.tsukumijima.net/
    どこかに免責事項など記載しているとは思いますが…)

Your answer might help someone💌