Skip to main content

Scraper and utilities for UK Parliamentary bills

Project description

ParlPy

Package to scrape and process UK Parliamentary bills, votes and MP contact information.

Written as part of University of Bath Integrated Project module.


Usage

Install

pipenv install ParlPy==1.1.0.1

Intended Usage

A list of bills to collect information about is generated using either the update_all_bills_in_session or the get_changed_bills_in_session methods of a BillsOverview object from parlpy.bills.bill_list_fetcher. The former simply gets a list of all bills and places them in member DataFrame bills_overview_data. The latter has persistence, so that its first run behaves like update_all_bills_in_session, but after this places only bills updated after it was last run in the DataFrame.

The BillsOverview object is then passed to todo: iterator

Intended Example Usage

import parlpy.bills.bill_list_fetcher as blf
import parlpy.bills.bill_details_iterator as bdi

test_fetcher = blf.BillsOverview()
test_fetcher.get_changed_bills_in_session()

for s in bdi.get_bill_details(test_fetcher):
    summary, bill_divisions_list = s[0], s[1]
    print(f"summary {summary}")
    for d in bill_divisions_list:
        print(f"division name {d.division_name}")
        print(f"division stage {d.division_stage}")
        print(f"ayes {d.ayes}")
        print(f"noes {d.noes}")

# ...
# repeat

The above gets summary and a list of DivisionDetail objects for each bill. BillsOverview has persistence, storing the last time get_changed_bills_in_session was called using a pickle variable. So eg the script can be run, the values stored in a DB, then run again later to get info on bills that the parliamentary website says have updated.


Subpackages

parlpy.bills

parlpy.bills for fetching bill data

Class: BillsOverview

Constructs an object for collecting basic information on all bills in the current Parliamentary session. Its purpose is to

  • get a list of existing bills - so that we know what to scrape
  • get path to further details for each bill - so that we can assemble the url to scrape further info from

Public instance variables:

  • DataFrame : bills_overview_data

    DF containing bill titles, their last updated time and the path to further details on the bill

Public instance methods:

  • None : get_changed_bills_in_session(session_name="2019-21", fetch_delay=0)

  • None : reset_datetime_last_scraped()

  • None : update_all_bills_in_session(session_name="2019-21", fetch_delay=0)

    Method to called to update self.bills_overview_data, fetching pages at maximum rate when fetch_delay=0


Data Sources and Rationale

A list of extant bills and acts are scraped from https://bills.parliament.uk. Scraping was the only choice for collecting this list as outlined in the bullet points below

  • There is an official RSS feed, however this only lists the 50 most recently updated bills, so we do not use this source as we would not have been able to collect older bills.

  • The API at https://explore.data.parliament.uk/?endpoint=bills does not contain bills more recent than 2018, so we do not utilise this as it does not present new bills.

  • The recent API https://developer.parliament.uk/ does not provide bills.

The package however does make use of the official UK Parliamentary API for collecting division data and for collecting data on MP's.

parlpy.bills.bill_list_fetcher

BillsOverview.get_changed_bills_in_session() and BillsOverview.update_all_bills_in_session()

Both scrape data from https://bills.parliament.uk

parlpy.bills.bill_summary_fetcher

get_summary()

Scrapes data from https://bills.parliament.uk


Versions

1.1.0.1

  • make scraper session keys match those in utils.dates

1.1.0

  • add function to get parties and their corresponding ids

1.0.1

  • improve accuracy of associating divisions with bills

1.0.0

  • add iterator functionality to get details on bills provided by a BillsOverview object

0.1.0

  • adds method to get a list only of bills updated since method was last run, uses pickled datetime so that script can be stopped and run as required

0.0.2

  • gets a DataFrame containing bill titles, their last updated times and page paths (page paths to be used in future versions)
  • page request delay configurable

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ParlPy-1.1.0.1.tar.gz (13.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ParlPy-1.1.0.1-py3-none-any.whl (14.9 kB view details)

Uploaded Python 3

File details

Details for the file ParlPy-1.1.0.1.tar.gz.

File metadata

  • Download URL: ParlPy-1.1.0.1.tar.gz
  • Upload date:
  • Size: 13.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.1.post20201107 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.5

File hashes

Hashes for ParlPy-1.1.0.1.tar.gz
Algorithm Hash digest
SHA256 871488289380ab6d75c3a1c80137e080554541d27735a34e5b1f622055d14151
MD5 67e7b4fa6ee99b2bc5e53835ce96c9c1
BLAKE2b-256 10d0099606a685b7f5a495626a9b37c1e0497506ec193fdf1fb003b42afa44c8

See more details on using hashes here.

File details

Details for the file ParlPy-1.1.0.1-py3-none-any.whl.

File metadata

  • Download URL: ParlPy-1.1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 14.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.1.post20201107 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.5

File hashes

Hashes for ParlPy-1.1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d4b224ee7be8b366c1eea9eabdb920c6679ac940dafb526299d09a043debaa7e
MD5 ae2de4232381181310fbee12345e5674
BLAKE2b-256 2375977deeadbc87376479193d992248d3ee358862b7083473e48844319a8560

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page