前提・実現したいこと
Pythonで機械学習をする際の学習データをcookpadからスクレイピングするコードを書いています。その際に関数内からグローバル宣言をしようとしたらSyntaxErrorが起きてしまいました。エラーメッセージは以下の通りです。
発生している問題・エラーメッセージ
File "getURLbc.py", line 46 global fir_link SyntaxError: name 'fir_link' is used prior to global declaration
コードは以下の通りです。大変冗長で読みにくいものかと思いますが、当方は初学者なものでどうかご容赦ください。
python
1### #coding: UTF-8 2 3import requests 4from bs4 import BeautifulSoup 5import time 6 7URLs=[] 8sec_link=[] 9thi_link=[] 10count=1 11 12fo = open(r'recipes\meat\allrecipes.txt','a') 13 14print('カテゴリトップのURLを入力してください') 15fir_link=str(input()) 16 17def URLget(): 18 for x in range(10000): 19 r = requests.get(fir_link) 20 soup = BeautifulSoup(r.content, "html.parser") 21 for a in soup.find_all('a'): 22 sec_link.append(a.get('href')) 23 24 for i in sec_link: 25 if 'recipe' in str(i): 26 thi_link.append(i) 27 28 URL=[i for i in thi_link if (i.replace('/recipe/' ,'')).isdigit()==True] 29 c_URL=[] 30 for i in URL: 31 c_URL.append('https://cookpad.com'+str(i)) 32 33 URL_set = set(c_URL) 34 URL_list = list(URL_set) 35 global URLs 36 URLs = URL_list 37 38 key=soup.find('a', class_='next_page') 39 key2=key.get('href') 40 global fir_link 41 fir_link='https://cookpad.com'+str(key2) 42 43 print(str(count)+'回目の取得に成功しました。') 44 global count 45 count += 1 46 47 time.sleep(5) 48 49 fo.write(URLs) 50 51URLget() 52 53
とても初歩的な質問かもしれませんが、どうか回答お願いいたします。
試したこと
このコードを用いて2週間ほど前にスクレイピングした時は前述のようなエラーはでませんでした。しかし、再度データを収集する必要が出てきたためこれを再度使用しようと思ったらエラーが出るようになってしまいました。間の2週間には、anaconda3をインストールして開発環境を少し変えたりしたので、それが原因かと思いアンインストールして再度試してみましたが解決できませんでした。
補足情報(FW/ツールのバージョンなど)
Python 3.7.0

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/26 04:12