Source code for kingfisher_scrapy.spiders.india_civic_data_lab

import scrapy

from kingfisher_scrapy.base_spiders import SimpleSpider
from kingfisher_scrapy.exceptions import KingfisherScrapyError
from kingfisher_scrapy.util import handle_http_error


[docs] class IndiaCivicDataLab(SimpleSpider): """ Domain CivicDataLab Bulk download documentation https://github.com/CivicDataLab/himachal-pradesh-health-procurement-OCDS/ """ name = 'india_civic_data_lab' # BaseSpider unflatten = True unflatten_args = { 'metatab_name': 'Meta', 'metatab_vertical_orientation': True, 'metatab_schema': 'https://standard.open-contracting.org/schema/1__1__5/release-package-schema.json' } # SimpleSpider data_type = 'release_package' # Local github_repo = 'CivicDataLab/himachal-pradesh-health-procurement-OCDS' def start_requests(self): url = f'https://api.github.com/repos/{self.github_repo}/git/trees/master' yield scrapy.Request(url, meta={'file_name': 'response.json'}, callback=self.parse_list) @handle_http_error def parse_list(self, response): # Use the GitHub API to list the files in the repository, and then download the files using a non-API method, # to avoid quota/rate limits. data = response.json() # https://docs.github.com/en/rest/reference/git#get-a-tree if data['truncated']: raise KingfisherScrapyError('Truncated results returned when querying the file list from GitHub') for node in data['tree']: file_name = node['path'] if file_name.endswith('.xlsx'): url = f'https://github.com/{self.github_repo}/raw/master/{file_name}?raw=true' yield scrapy.Request(url, meta={'file_name': file_name})