@@ -304,22 +304,37 @@ def get_bill_urls(self, chamber, session, doc_type):
304304 for bill_url in doc .xpath ("//table/tbody/tr/td[1]/a/@href" ):
305305 yield bill_url
306306
307- def scrape (self , session = None ):
307+ def scrape (self , session = None , chamber = None , bill_type_abbrv = None ):
308308 session_id = session
309309 # scrape a single bill for debug
310310 # yield from self.scrape_bill(
311311 # 'upper', '104th', 'SB', 'https://ilga.gov/Legislation/BillStatus?GAID=18&DocNum=2111&DocTypeID=SB&LegId=161644&SessionID=114'
312312 # )
313313
314+ # Handle optional input parameters
315+ if chamber and chamber not in ["lower" , "upper" ]:
316+ self .error (f"Invalid chamber argument: { chamber } " )
317+ elif chamber :
318+ chamber_list = [chamber ]
319+ else :
320+ chamber_list = ["lower" , "upper" ]
321+
322+ if bill_type_abbrv and bill_type_abbrv not in DOC_TYPES .keys ():
323+ self .error (f"Invalid bill_type_abbrv: { bill_type_abbrv } " )
324+ elif bill_type_abbrv :
325+ bill_type_list = {bill_type_abbrv : DOC_TYPES [bill_type_abbrv ]}
326+ else :
327+ bill_type_list = DOC_TYPES
328+
314329 # Sessions that run from 1997 - 2002. Last few sessiosn before bills were PDFs
315330 if session in ["90th" , "91st" , "92nd" ]:
316331 yield from self .scrape_archive_bills (session )
317332 else :
318333 urls = {}
319334 # Identify all bill URLs first for easier debugging
320- for chamber in [ "lower" , "upper" ] :
335+ for chamber in chamber_list :
321336 for doc_type in [
322- chamber_slug (chamber ) + doc_type for doc_type in DOC_TYPES
337+ chamber_slug (chamber ) + doc_type for doc_type in bill_type_list
323338 ]:
324339 if chamber not in urls :
325340 urls [chamber ] = {doc_type : []}
@@ -337,11 +352,12 @@ def scrape(self, session=None):
337352 chamber , session_id , chamber_doc_type , bill_url
338353 )
339354
340- # special non-chamber cases
341- for bill_url in self .get_bill_urls (chamber , session_id , "AM" ):
342- yield from self .scrape_bill (
343- chamber , session_id , "AM" , bill_url , "appointment"
344- )
355+ # special non-chamber cases, if no bill type abbreviation is specified
356+ if not bill_type_abbrv :
357+ for bill_url in self .get_bill_urls (chamber , session_id , "AM" ):
358+ yield from self .scrape_bill (
359+ chamber , session_id , "AM" , bill_url , "appointment"
360+ )
345361
346362 def scrape_archive_bills (self , session ):
347363 session_abr = session [0 :2 ]
0 commit comments