この単純なのPython 3スクリプト:ValueErrorを修正するにはどうすればよいですか?クローズファイル例外の読み取り?
import urllib.request
host = "scholar.google.com"
link = "/scholar.bib?q=info:K7uZdMSvdQ0J:scholar.google.com/&output=citation&hl=en&as_sdt=1,14&ct=citation&cd=0"
url = "http://" + host + link
filename = "cite0.bib"
print(url)
urllib.request.urlretrieve(url, filename)
は、この例外が発生します:
Traceback (most recent call last):
File "C:\Users\ricardo\Desktop\Google-Scholar\BibTex\test2.py", line 8, in <module>
urllib.request.urlretrieve(url, filename)
File "C:\Python32\lib\urllib\request.py", line 150, in urlretrieve
return _urlopener.retrieve(url, filename, reporthook, data)
File "C:\Python32\lib\urllib\request.py", line 1597, in retrieve
block = fp.read(bs)
ValueError: read of closed file
私は、これは一時的な問題かもしれないと思ったので、私はそうのように扱ういくつかの簡単な例外を追加しました:
をimport random
import time
import urllib.request
host = "scholar.google.com"
link = "/scholar.bib?q=info:K7uZdMSvdQ0J:scholar.google.com/&output=citation&hl=en&as_sdt=1,14&ct=citation&cd=0"
url = "http://" + host + link
filename = "cite0.bib"
print(url)
while True:
try:
print("Downloading...")
time.sleep(random.randint(0, 5))
urllib.request.urlretrieve(url, filename)
break
except ValueError:
pass
しかし、これはちょうどDownloading...
を無限に印刷します。
「http:// scholar.google.com/robots.txt」を見ると、Googleがこのページの自動ダウンロードを禁止していることがわかります。 'wget'を使ってみると' 403 Forbidden'というエラーが出ます。私はこれもあなたのスクリプトに起こっていると思う。 –
@sendle APIはないので、私はそれを手動で解析しています。 –
@ senderle、おそらくあなたはコンテンツを取得するためにクッキーを送信する必要があります。 –