Snapshot: full project state
This commit is contained in:
75
.case-verify/leagle_search.py
Normal file
75
.case-verify/leagle_search.py
Normal file
@@ -0,0 +1,75 @@
|
||||
import re, subprocess, json, time, os
|
||||
|
||||
UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36"
|
||||
CK = "/tmp/lg_c.txt"
|
||||
|
||||
CASES = [
|
||||
("Littlefield", "Littlefield", "64471-3"),
|
||||
("Kovacs", "Kovacs", "60035-0"),
|
||||
("Chumbley", "Chumbley", "72539-0"),
|
||||
("Short", "Short", "61176-9"),
|
||||
("Borghi", "Gilroy", "80925-9"),
|
||||
("Elam", "Elam", "48219-5"),
|
||||
("Konzen", "Konzen", "50402-4"),
|
||||
("Witte", "Witte", "29341"),
|
||||
("Skarbek", "Skarbek", "18013-1-III"),
|
||||
("PearsonMaines", "Pearson-Maines", "29873-9-I"),
|
||||
("Olivares", "Olivares", "28758-3-I"),
|
||||
("Sedlock", "Sedlock", "28848-2-I"),
|
||||
("Glorfield", "Glorfield", "3410-1-III"),
|
||||
("Hadley", "Hadley", "44308"),
|
||||
("Mueller", "Mueller", "57592-9-I"),
|
||||
("White", "White", "23917-5-II"),
|
||||
("Schwarz", "Schwarz", "32274-2-III"),
|
||||
("Kraft", "Kraft", "58247-5"),
|
||||
("Berol", "Berol", "31379"),
|
||||
("Brewer", "Brewer", "66577-0"),
|
||||
("Brown", "Brown", "49548-3"),
|
||||
]
|
||||
|
||||
def curl(url, cookie_file=None, write=False, get_params=None):
|
||||
cmd = ["curl", "-s", "-m", "40", "-H", f"User-Agent: {UA}"]
|
||||
if cookie_file:
|
||||
cmd += ["-b", cookie_file, "-c", cookie_file]
|
||||
if get_params:
|
||||
cmd += ["-G"]
|
||||
for k, v in get_params.items():
|
||||
cmd += ["--data-urlencode", f"{k}={v}"]
|
||||
cmd.append(url)
|
||||
r = subprocess.run(cmd, capture_output=True, text=True, timeout=50)
|
||||
return r.stdout
|
||||
|
||||
def leagle_search(query):
|
||||
h = curl("https://www.leagle.com/leaglesearch", cookie_file=CK,
|
||||
get_params={"casen": query, "crt": "Washington"})
|
||||
results = []
|
||||
for m in re.finditer(r'<a href="https://www\.leagle\.com/decision/([a-z0-9]+)"[^>]*>\s*<h3>([^<]+)\(\s*<span class="dec-date">([^<]+)</span>\s*\)\s*</h3>\s*<p>(.*?)</p>', h, re.S):
|
||||
did, name, date, info = m.group(1), m.group(2).strip(), m.group(3).strip(), m.group(4)
|
||||
info = re.sub(r'<[^>]+>', ' ', info)
|
||||
info = re.sub(r'\s+', ' ', info).strip()
|
||||
results.append({"id": did, "name": name, "date": date, "info": info})
|
||||
return results
|
||||
|
||||
# ensure cookies
|
||||
curl("https://www.leagle.com/search", cookie_file=CK)
|
||||
time.sleep(1)
|
||||
|
||||
all_res = {}
|
||||
for key, query, docket in CASES:
|
||||
rs = leagle_search(query)
|
||||
picked = None
|
||||
# prefer docket match
|
||||
for r in rs:
|
||||
if docket.replace("-", "") in r["info"].replace("-", "").replace(" ", ""):
|
||||
picked = r; break
|
||||
if not picked:
|
||||
for r in rs:
|
||||
n = r["name"].lower()
|
||||
if key.lower() in n and ("marriage" in n or "estate" in n or key.lower() == "berol"):
|
||||
picked = r; break
|
||||
all_res[key] = picked
|
||||
print(key, "=>", (picked["id"], picked["date"], picked["info"][:70]) if picked else f"NOT FOUND ({len(rs)} results)")
|
||||
time.sleep(3)
|
||||
|
||||
json.dump(all_res, open("/Users/drjones/astraea-books/.case-verify/leagle/leagle_urls.json", "w"), indent=1)
|
||||
print("saved")
|
||||
Reference in New Issue
Block a user