前提・実現したいこと
特定のWEBページから条件にマッチしたファイルのみ保存したいです。
スクレイピングで下記URL(関西空港HP)から、
http://www.kansai-airports.co.jp/news/2020/
毎月公開される「関西国際空港・大阪国際空港・神戸空港 2020年●月利用状況」のPDFをダウンロード
したいと思いプログラムを作成しましたが、条件設定ができていないため、
現在は上記URLに表示されるPDFすべて(3種)をダウンロードしてしまいます。
「関西国際空港・大阪国際空港・神戸空港 2020年●月利用状況」
(http://www.kansai-airports.co.jp/news/2020/2807/J_TrafficReport_●●●●2020.pdf)
だけをダウンロードするには、URLの文字指定などが必要かと思いますがどのように行うべきでしょうか?
来月以降も"J_TrafficReport_"は含まれることが想定されるため、
例えば、URLに"J_TrafficReport_”が含まれているファイルのみという指定をかけたいと考えています。
一通り調べてみたのですが、解決せず、ご教示いただけますと幸いです。
よろしくお願いいたします。
該当のソースコード
Python
1import requests 2from bs4 import BeautifulSoup 3import urllib.request 4from urllib.parse import urljoin 5import os 6import time 7 8url = "http://www.kansai-airports.co.jp/news/2020/" 9base = "http://www.kansai-airports.co.jp/news/2020/" 10html = requests.get(url) 11soup = BeautifulSoup(html.content, "html.parser") 12 13div = soup.find("div", class_= "contentsType02") 14li = div.find_next("li") 15tags = li.find_all_next("a") 16print(tags) 17 18headers = {"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"} 19 20for i in range(len(tags)): 21 filepath = "{}.pdf".format(i) 22 target = tags[i]["href"] 23 if os.path.splitext(target)[1] == '.pdf': 24 #os.path.splitext関数は、pathをbase(拡張子以外の部分)とext(ピリオドを含む拡張子)に分割 25 url_1 = urljoin(base, target) 26 request = urllib.request.Request(url=url_1, headers=headers) 27 with open(filepath, "wb") as f: 28 f.write(urllib.request.urlopen(request).read())
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/06 06:33
2020/05/07 01:38