自分自身の改修事項メモなのです。
法技研六法は,e-Govの法令データ提供システムだけではなく,裁判所HPの規則集からもリンクを収集して検索できるようにしています。裁判所規則は(行政規則とは異なり)法律と同格の法なので,実務上重要。
日本国憲法
第77条① 最高裁判所は、訴訟に関する手続、弁護士、裁判所の内部規律及び司法事務処理に関する事項について、規則を定める権限を有する。
裁判所規則は裁判所ウェブサイトに一覧が載っているので,これをスクレイピングすればリストを作ることができます。
これまで,法令リストを作るにあたっては,e-Govの法令APIのXMLデータをBeautifulSoupで処理していた余勢を駆って,裁判所規則集もBeautifulSoupで処理していたのですが,どうも最近の裁判所Web更新の折にHTMLがinvalidになったらしく(余計な</a>
タグが入ってる),BeautifulSoupでのスクレイピングがうまくいかなくなりました。
ということで,(最初からそうしてりゃよかったのですが)正規表現でスクレイピングするように改修したので,そのメモ。
共通部分
import requests
import json
from urllib.parse import urljoin
#分野別の規則集URL
URL_COURTS = [
"http://www.courts.go.jp/kisokusyu/minzi_kisoku/index.html",
"http://www.courts.go.jp/kisokusyu/keizi_kisoku/index.html",
"http://www.courts.go.jp/kisokusyu/kazi_syonen_kisoku/index.html",
"http://www.courts.go.jp/kisokusyu/sonota_kisoku/index.html"
]
lawList = []
旧コード
from bs4 import BeautifulSoup
for genre in URL_COURTS:
r = requests.get(genre)
r.encoding = "utf-8" #裁判所HPはencodingがHTTP-Headerでわからない?
soup = BeautifulSoup(r.text, "html.parser")
links = soup.select('div#contents ul.txt90 a')
for alink in links:
print(alink)
if alink.string: #何故か裁判所のリンク集に,文字を含まないリンクがある場合が。
aLaw = {
"LawName": "裁判所::"+alink.string,
"LawNameShort": alink.string,
"URL": urljoin(r.url, alink.get('href'))
}
lawList.append(aLaw)
新コード
import re
reKisoku = re.compile('<li class="li01"><a href="(.+?)" target="_.+?">(.+?)</a>')
for genre in URL_COURTS:
r = requests.get(genre)
r.encoding = "utf-8"
kisokus = reKisoku.findall(r.text)
for aKisoku in kisokus:
aLaw = {
"LawName": "裁判所::"+aKisoku[1],
"LawNameShort": aKisoku[1],
"URL": urljoin(r.url, aKisoku[0])
}
lawList.append(aLaw)