前提・実現したいこと
経産省のHPから、PDFファイルを保存したい。
発生している問題・エラーメッセージ
[vagrant@localhost 20190627_scrayping_warkinggroup]$ python warkinggroup.py
Traceback (most recent call last):
File "warkinggroup.py", line 22, in <module>
urllib.request.urlretrieve(url_1, filepath)
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/urllib/request.py", line 188, in urlretrieve
with contextlib.closing(urlopen(url, data)) as fp:
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/urllib/request.py", line 163, in urlopen
return opener.open(url, data, timeout)
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/urllib/request.py", line 472, in open
response = meth(req, response)
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/urllib/request.py", line 582, in http_response
'http', request, response, code, msg, hdrs)
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/urllib/request.py", line 510, in error
return self._call_chain(*args)
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/urllib/request.py", line 444, in _call_chain
result = func(*args)
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/urllib/request.py", line 590, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden
該当のソースコード
python_3.5.2
1import requests 2from bs4 import BeautifulSoup 3import urllib.request 4from urllib.parse import urljoin 5import re 6import time 7 8url = "https://www.meti.go.jp/shingikai/sankoshin/hoan_shohi/denryoku_anzen/019.html" 9base = "https://www.meti.go.jp/shingikai/sankoshin/hoan_shohi/denryoku_anzen/" 10html = requests.get(url) 11soup = BeautifulSoup(html.content, "html.parser") 12 13div = soup.find("div", class_= "main w1000") 14li = div.find_next("li") 15tags = li.find_all_next("a") 16 17for i in range(len(tags)): 18 filepath = "{}.pdf".format(i) 19 target = tags[i]["href"] 20 if re.match(r"pdf", target): 21 url_1 = urljoin(base, target) 22 urllib.request.urlretrieve(url_1, filepath) 23 # print(target) 24 # print(url_1) 25 # time.sleep(1)
試したこと
最後のurllib.request.urlretrieve(url_1, filepath)をコメントアウトとし、
print(target) # print(url_1) をアンコメントするとしっかりprintされます。
baseの絶対パス表示がおかしいのかと考え、様々試しましたがなかなかうまくいきません。
また、time関数で相手のサーバーに負荷をかけないよう配慮して行ってもいかなかったので、
やはりurllib.request.urlretrieve(url_1, filepath)の部分もしくはその変数が間違いであるんだと思います。
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/30 08:06