Pythonだけで抽出できるように変更しました
参考
- 一番上の最新のPDFをダウンロード
- 8週目以降の1ページ右上部分から取得(座標指定)
- Colaboratory上で実行
- 2/13だけChinaのdeathsが取れない ※Colaboratory以外では正常に抽出できました
tool | Colaboratory | Windows10 |
---|---|---|
pdftotext | × | - |
pdfbox | × | 〇 |
tika | × | 〇 |
pdfminer | × | 〇 |
プログラム
2/20 タグが変更になり日付のところでエラーが発生しましたので修正しました
!apt install poppler-utils import requests from bs4 import BeautifulSoup import urllib.parse import re import datetime # クエリーの除去 def remove_all_query(url): return urllib.parse.urlunparse(urllib.parse.urlparse(url)._replace(query=None)) url = "https://www.who.int/emergencies/diseases/novel-coronavirus-2019/situation-reports/" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko", } r = requests.get(url, headers=headers) r.raise_for_status() soup = BeautifulSoup(r.content, "html.parser") # レポートのタグ取得 href = soup.find(string=re.compile("^Situation report - \d{1,2}")).find_parent("a") # レポートの日付を取得 dt = datetime.datetime.strptime(href.find_parent("p").contents[-1], "%d %B %Y") # レポートのPDFのリンクからクエリーを除去 link = remove_all_query(urllib.parse.urljoin(url, href.get("href"))) # レポートのPDFをダウンロード !wget $link -O data.pdf # PDFからテキスト取得 !pdftotext -f 1 -l 1 -layout -x 405 -y 80 -W 180 -H 370 data.pdf with open("data.txt") as fr: text = fr.read() # テキスト確認 print(text) # テキストから感染者数を取得 conf = [int(i[0].replace(" ", "")) for i in re.findall("([0-9 ]+) (laboratory-)?confirmed", text)] deaths = [int(i.replace(" ", "")) for i in re.findall("([0-9 ]+) death", text)] deaths.extend([0]) result = [dt.strftime("%Y-%m-%d"), conf[0], deaths[0] + deaths[1], conf[1], deaths[0]] # 感染者数を表示 print(result)