diff --git a/api/failing.json b/api/failing.json index 4898b3633d..0baa8d999f 100644 --- a/api/failing.json +++ b/api/failing.json @@ -1 +1 @@ -[{"council_id":"BDG","missing":false,"latest_run":{"status_code":1,"log_text":"[10:39:34] Fetching Scraper for: BDG handlers.py:23\n Begin attempting to scrape: BDG handlers.py:27\n Deleting existing data... base.py:257\n[10:39:35] Getting all files in Councillors... base.py:209\n ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n[10:39:36] ...data deleted. base.py:264\n Scraping from base.py:49\n https://modgov.lbbd.gov.uk/internet/mgWebService.asmx/GetC \n ouncillorsByWard \n[10:39:52] [Errno 110] Connection timed out handlers.py:36\n Finished attempting to scrape: BDG base.py:345\n","errors":"Traceback (most recent call last):\n File \"/opt/python/httpx/_transports/default.py\", line 69, in map_httpcore_exceptions\n yield\n File \"/opt/python/httpx/_transports/default.py\", line 233, in handle_request\n resp = self._pool.handle_request(req)\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 216, in handle_request\n raise exc from None\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 196, in handle_request\n response = connection.handle_request(\n File \"/opt/python/httpcore/_sync/connection.py\", line 99, in handle_request\n raise exc\n File \"/opt/python/httpcore/_sync/connection.py\", line 76, in handle_request\n stream = self._connect(request)\n File \"/opt/python/httpcore/_sync/connection.py\", line 122, in _connect\n stream = self._network_backend.connect_tcp(**kwargs)\n File \"/opt/python/httpcore/_backends/sync.py\", line 205, in connect_tcp\n with map_exceptions(exc_map):\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpcore/_exceptions.py\", line 14, in map_exceptions\n raise to_exc(exc) from exc\nhttpcore.ConnectTimeout: [Errno 110] Connection timed out\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 197, in run\n wards = self.get_councillors()\n File \"/var/task/lgsf/councillors/scrapers.py\", line 216, in get_councillors\n req = self.get(self.format_councillor_api_url())\n File \"/var/task/lgsf/scrapers/base.py\", line 55, in get\n response = self.http_client.get(url, headers=headers, timeout=30)\n File \"/opt/python/httpx/_client.py\", line 1054, in get\n return self.request(\n File \"/opt/python/httpx/_client.py\", line 827, in request\n return self.send(request, auth=auth, follow_redirects=follow_redirects)\n File \"/opt/python/httpx/_client.py\", line 914, in send\n response = self._send_handling_auth(\n File \"/opt/python/httpx/_client.py\", line 942, in _send_handling_auth\n response = self._send_handling_redirects(\n File \"/opt/python/httpx/_client.py\", line 979, in _send_handling_redirects\n response = self._send_single_request(request)\n File \"/opt/python/httpx/_client.py\", line 1015, in _send_single_request\n response = transport.handle_request(request)\n File \"/opt/python/httpx/_transports/default.py\", line 232, in handle_request\n with map_httpcore_exceptions():\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpx/_transports/default.py\", line 86, in map_httpcore_exceptions\n raise mapped_exc(message) from exc\nhttpx.ConnectTimeout: [Errno 110] Connection timed out\n","start":"2024-10-21 10:39:34.569354","end":"2024-10-21 10:39:52.401208","duration":17}},{"council_id":"BOL","missing":false,"latest_run":{"status_code":1,"log_text":"[10:50:49] Fetching Scraper for: BOL handlers.py:23\n Begin attempting to scrape: BOL handlers.py:27\n[10:50:50] Deleting existing data... base.py:257\n Getting all files in Councillors... base.py:209\n ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n[10:50:51] ...data deleted. base.py:264\n Scraping from base.py:49\n https://www.democracy.bolton.gov.uk/cmis5/People.aspx \n [Errno -2] Name or service not known handlers.py:36\n Finished attempting to scrape: BOL base.py:345\n","errors":"Traceback (most recent call last):\n File \"/opt/python/httpx/_transports/default.py\", line 69, in map_httpcore_exceptions\n yield\n File \"/opt/python/httpx/_transports/default.py\", line 233, in handle_request\n resp = self._pool.handle_request(req)\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 216, in handle_request\n raise exc from None\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 196, in handle_request\n response = connection.handle_request(\n File \"/opt/python/httpcore/_sync/connection.py\", line 99, in handle_request\n raise exc\n File \"/opt/python/httpcore/_sync/connection.py\", line 76, in handle_request\n stream = self._connect(request)\n File \"/opt/python/httpcore/_sync/connection.py\", line 122, in _connect\n stream = self._network_backend.connect_tcp(**kwargs)\n File \"/opt/python/httpcore/_backends/sync.py\", line 205, in connect_tcp\n with map_exceptions(exc_map):\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpcore/_exceptions.py\", line 14, in map_exceptions\n raise to_exc(exc) from exc\nhttpcore.ConnectError: [Errno -2] Name or service not known\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 55, in run\n for councillor_html in self.get_councillors():\n File \"/var/task/lgsf/councillors/scrapers.py\", line 272, in get_councillors\n req = self.get(\n File \"/var/task/lgsf/scrapers/base.py\", line 55, in get\n response = self.http_client.get(url, headers=headers, timeout=30)\n File \"/opt/python/httpx/_client.py\", line 1054, in get\n return self.request(\n File \"/opt/python/httpx/_client.py\", line 827, in request\n return self.send(request, auth=auth, follow_redirects=follow_redirects)\n File \"/opt/python/httpx/_client.py\", line 914, in send\n response = self._send_handling_auth(\n File \"/opt/python/httpx/_client.py\", line 942, in _send_handling_auth\n response = self._send_handling_redirects(\n File \"/opt/python/httpx/_client.py\", line 979, in _send_handling_redirects\n response = self._send_single_request(request)\n File \"/opt/python/httpx/_client.py\", line 1015, in _send_single_request\n response = transport.handle_request(request)\n File \"/opt/python/httpx/_transports/default.py\", line 232, in handle_request\n with map_httpcore_exceptions():\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpx/_transports/default.py\", line 86, in map_httpcore_exceptions\n raise mapped_exc(message) from exc\nhttpx.ConnectError: [Errno -2] Name or service not known\n","start":"2024-10-21 10:50:49.563227","end":"2024-10-21 10:50:51.580502","duration":2}},{"council_id":"CAN","missing":false,"latest_run":{"status_code":1,"log_text":"[08:59:18] Fetching Scraper for: CAN handlers.py:23\n Begin attempting to scrape: CAN handlers.py:27\n[08:59:19] Deleting existing data... base.py:257\n Getting all files in Councillors... base.py:209\n ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n[08:59:20] ...data deleted. base.py:264\n Scraping from base.py:49\n https://www.cannockchasedc.gov.uk/council/about-council/yo \n ur-councillors \n[08:59:22] list index out of range handlers.py:36\n[08:59:23] Finished attempting to scrape: CAN base.py:345\n","errors":"Traceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 55, in run\n for councillor_html in self.get_councillors():\n File \"/var/task/lgsf/councillors/scrapers.py\", line 161, in get_councillors\n container = self.get_list_container()\n File \"/var/task/lgsf/councillors/scrapers.py\", line 158, in get_list_container\n return selected[0]\nIndexError: list index out of range\n","start":"2024-10-21 08:59:18.808464","end":"2024-10-21 08:59:23.135894","duration":4}},{"council_id":"CAS","missing":false,"latest_run":{"status_code":1,"log_text":"[09:08:54] Fetching Scraper for: CAS handlers.py:23\n[09:08:55] Begin attempting to scrape: CAS handlers.py:27\n Deleting existing data... base.py:257\n Getting all files in Councillors... base.py:209\n[09:08:56] ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n ...data deleted. base.py:264\n Scraping from https://www.castlepoint.gov.uk/councillors base.py:49\n[09:08:58] Scraping from base.py:49\n https://www.castlepoint.gov.ukhttps://castlepoint.cmis.uk. \n com/castlepoint/Committees/CurrentCommittees.aspx?a=1 \n [Errno -2] Name or service not known handlers.py:36\n Finished attempting to scrape: CAS base.py:345\n","errors":"Traceback (most recent call last):\n File \"/opt/python/httpx/_transports/default.py\", line 69, in map_httpcore_exceptions\n yield\n File \"/opt/python/httpx/_transports/default.py\", line 233, in handle_request\n resp = self._pool.handle_request(req)\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 216, in handle_request\n raise exc from None\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 196, in handle_request\n response = connection.handle_request(\n File \"/opt/python/httpcore/_sync/connection.py\", line 99, in handle_request\n raise exc\n File \"/opt/python/httpcore/_sync/connection.py\", line 76, in handle_request\n stream = self._connect(request)\n File \"/opt/python/httpcore/_sync/connection.py\", line 122, in _connect\n stream = self._network_backend.connect_tcp(**kwargs)\n File \"/opt/python/httpcore/_backends/sync.py\", line 205, in connect_tcp\n with map_exceptions(exc_map):\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpcore/_exceptions.py\", line 14, in map_exceptions\n raise to_exc(exc) from exc\nhttpcore.ConnectError: [Errno -2] Name or service not known\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 57, in run\n councillor = self.get_single_councillor(councillor_html)\n File \"scrapers/CAS-castle-point/councillors.py\", line 15, in get_single_councillor\n soup = self.get_page(url)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 141, in get_page\n page = self.get(url, extra_headers=self.extra_headers).text\n File \"/var/task/lgsf/scrapers/base.py\", line 55, in get\n response = self.http_client.get(url, headers=headers, timeout=30)\n File \"/opt/python/httpx/_client.py\", line 1054, in get\n return self.request(\n File \"/opt/python/httpx/_client.py\", line 827, in request\n return self.send(request, auth=auth, follow_redirects=follow_redirects)\n File \"/opt/python/httpx/_client.py\", line 914, in send\n response = self._send_handling_auth(\n File \"/opt/python/httpx/_client.py\", line 942, in _send_handling_auth\n response = self._send_handling_redirects(\n File \"/opt/python/httpx/_client.py\", line 979, in _send_handling_redirects\n response = self._send_single_request(request)\n File \"/opt/python/httpx/_client.py\", line 1015, in _send_single_request\n response = transport.handle_request(request)\n File \"/opt/python/httpx/_transports/default.py\", line 232, in handle_request\n with map_httpcore_exceptions():\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpx/_transports/default.py\", line 86, in map_httpcore_exceptions\n raise mapped_exc(message) from exc\nhttpx.ConnectError: [Errno -2] Name or service not known\n","start":"2024-10-21 09:08:54.982830","end":"2024-10-21 09:08:58.728131","duration":3}},{"council_id":"EAY","missing":false,"latest_run":{"status_code":1,"log_text":"[10:35:27] Fetching Scraper for: EAY handlers.py:23\n Begin attempting to scrape: EAY handlers.py:27\n Deleting existing data... base.py:257\n[10:35:28] Getting all files in Councillors... base.py:209\n ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n[10:35:29] ...data deleted. base.py:264\n Scraping from base.py:49\n https://www.east-ayrshire.gov.uk/CouncilAndGovernment/Abou \n t-the-Council/Councillors-and-Provost/YourCouncillor.aspx \n[10:35:30] Scraping from base.py:49\n https://www.east-ayrshire.gov.uk/CouncilAndGovernment/Abou \n t-the-Council/Councillors-and-Provost/YourCouncillor.aspx? \n 9 \n 'NoneType' object has no attribute 'find_parent' handlers.py:36\n[10:35:31] Finished attempting to scrape: EAY base.py:345\n","errors":"Traceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 57, in run\n councillor = self.get_single_councillor(councillor_html)\n File \"scrapers/EAY-east-ayrshire/councillors.py\", line 22, in get_single_councillor\n .find_parent(\"div\")\nAttributeError: 'NoneType' object has no attribute 'find_parent'\n","start":"2024-10-21 10:35:27.432800","end":"2024-10-21 10:35:31.247236","duration":3}},{"council_id":"FYL","missing":false,"latest_run":{"status_code":1,"log_text":"[10:14:35] Fetching Scraper for: FYL handlers.py:23\n Begin attempting to scrape: FYL handlers.py:27\n[10:14:36] Deleting existing data... base.py:257\n Getting all files in Councillors... base.py:209\n Getting all files in Councillors/json... base.py:209\n ...found 30 files in Councillors/json base.py:225\n Getting all files in Councillors/raw... base.py:209\n[10:14:37] ...found 30 files in Councillors/raw base.py:225\n ...found 61 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 61 files base.py:236\n ...data deleted. base.py:264\n Scraping from base.py:49\n https://fylde.cmis.uk.com/fylde/CouncillorsandMP.aspx \n[10:14:39] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/48/ScreenMode/Alphabetical/D \n efault.aspx \n[10:14:43] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/48/ScreenMode/Alphabetical/D \n efault.aspx \n[10:14:46] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/148/ScreenMode/Alphabetical/ \n Default.aspx \n[10:14:49] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/148/ScreenMode/Alphabetical/ \n Default.aspx \n[10:14:50] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/84/ScreenMode/Alphabetical/D \n efault.aspx \n[10:14:53] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/84/ScreenMode/Alphabetical/D \n efault.aspx \n[10:14:55] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/211/ScreenMode/Alphabetical/ \n Default.aspx \n[10:14:57] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/211/ScreenMode/Alphabetical/ \n Default.aspx \n[10:14:58] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/207/ScreenMode/Alphabetical/ \n Default.aspx \n[10:15:01] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/207/ScreenMode/Alphabetical/ \n Default.aspx \n[10:15:02] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/52/ScreenMode/Alphabetical/D \n efault.aspx \n[10:15:06] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/52/ScreenMode/Alphabetical/D \n efault.aspx \n[10:15:09] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/208/ScreenMode/Alphabetical/ \n Default.aspx \n[10:15:12] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/208/ScreenMode/Alphabetical/ \n Default.aspx \n[10:15:13] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/43/ScreenMode/Alphabetical/D \n efault.aspx \n[10:15:17] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/43/ScreenMode/Alphabetical/D \n efault.aspx \n[10:15:18] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/172/ScreenMode/Alphabetical/ \n Default.aspx \n[10:15:21] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/172/ScreenMode/Alphabetical/ \n Default.aspx \n[10:15:23] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/213/ScreenMode/Alphabetical/ \n Default.aspx \n[10:15:26] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/213/ScreenMode/Alphabetical/ \n Default.aspx \n[10:15:27] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/209/ScreenMode/Alphabetical/ \n Default.aspx \n[10:15:31] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/209/ScreenMode/Alphabetical/ \n Default.aspx \n[10:15:32] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/15/ScreenMode/Alphabetical/D \n efault.aspx \n[10:15:37] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/15/ScreenMode/Alphabetical/D \n efault.aspx \n[10:15:38] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/206/ScreenMode/Alphabetical/ \n Default.aspx \n[10:15:41] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/206/ScreenMode/Alphabetical/ \n Default.aspx \n[10:15:42] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/174/ScreenMode/Alphabetical/ \n Default.aspx \n[10:15:45] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/174/ScreenMode/Alphabetical/ \n Default.aspx \n[10:15:47] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/14/ScreenMode/Alphabetical/D \n efault.aspx \n[10:15:50] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/14/ScreenMode/Alphabetical/D \n efault.aspx \n[10:15:51] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/186/ScreenMode/Alphabetical/ \n Default.aspx \n[10:15:54] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/186/ScreenMode/Alphabetical/ \n Default.aspx \n[10:15:56] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/176/ScreenMode/Alphabetical/ \n Default.aspx \n[10:16:01] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/176/ScreenMode/Alphabetical/ \n Default.aspx \n[10:16:02] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/21/ScreenMode/Alphabetical/D \n efault.aspx \n[10:16:05] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/21/ScreenMode/Alphabetical/D \n efault.aspx \n[10:16:07] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/35/ScreenMode/Alphabetical/D \n efault.aspx \n[10:16:10] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/35/ScreenMode/Alphabetical/D \n efault.aspx \n[10:16:11] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/37/ScreenMode/Alphabetical/D \n efault.aspx \n[10:16:14] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/37/ScreenMode/Alphabetical/D \n efault.aspx \n[10:16:15] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/153/ScreenMode/Alphabetical/ \n Default.aspx \n[10:16:19] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/153/ScreenMode/Alphabetical/ \n Default.aspx \n[10:16:20] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/212/ScreenMode/Alphabetical/ \n Default.aspx \n[10:16:23] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/212/ScreenMode/Alphabetical/ \n Default.aspx \n[10:16:26] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/187/ScreenMode/Alphabetical/ \n Default.aspx \n[10:16:29] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/187/ScreenMode/Alphabetical/ \n Default.aspx \n[10:16:31] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/24/ScreenMode/Alphabetical/D \n efault.aspx \n[10:16:34] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/24/ScreenMode/Alphabetical/D \n efault.aspx \n[10:16:35] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/177/ScreenMode/Alphabetical/ \n Default.aspx \n[10:16:38] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/177/ScreenMode/Alphabetical/ \n Default.aspx \n[10:16:40] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/16/ScreenMode/Alphabetical/D \n efault.aspx \n[10:16:43] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/16/ScreenMode/Alphabetical/D \n efault.aspx \n[10:16:44] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/167/ScreenMode/Alphabetical/ \n Default.aspx \n[10:16:48] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/167/ScreenMode/Alphabetical/ \n Default.aspx \n[10:16:51] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/99/ScreenMode/Alphabetical/D \n efault.aspx \n[10:16:55] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/99/ScreenMode/Alphabetical/D \n efault.aspx \n[10:16:56] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/34/ScreenMode/Alphabetical/D \n efault.aspx \n[10:16:59] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/34/ScreenMode/Alphabetical/D \n efault.aspx \n[10:17:01] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/210/ScreenMode/Alphabetical/ \n Default.aspx \n[10:17:03] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/210/ScreenMode/Alphabetical/ \n Default.aspx \n[10:17:05] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/221/ScreenMode/Alphabetical/ \n Default.aspx \n[10:17:07] 'NoneType' object has no attribute 'parent' handlers.py:36\n Committing batch 1 consisting of 60 files base.py:297\n[10:17:08] Finished attempting to scrape: FYL base.py:345\n","errors":"Traceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 57, in run\n councillor = self.get_single_councillor(councillor_html)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 300, in get_single_councillor\n party = self.get_party_name(list_page_html)\n File \"scrapers/FYL-fylde/councillors.py\", line 17, in get_party_name\n .parent.get_text(strip=True)\nAttributeError: 'NoneType' object has no attribute 'parent'\n","start":"2024-10-21 10:14:35.717624","end":"2024-10-21 10:17:08.685243","duration":152}},{"council_id":"GLG","missing":false,"latest_run":{"status_code":1,"log_text":"[08:55:07] Fetching Scraper for: GLG handlers.py:23\n[08:55:08] Begin attempting to scrape: GLG handlers.py:27\n Deleting existing data... base.py:257\n Getting all files in Councillors... base.py:209\n[08:55:09] ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n ...data deleted. base.py:264\n Scraping from base.py:49\n https://www.glasgow.gov.uk/councillorsandcommittees/allMem \n bers.asp?sort=0&page=0&rec=100 \n Client error '404 Not Found' for url handlers.py:36\n 'https://www.glasgow.gov.uk/councillorsandcommittees/a \n llMembers.asp?sort=0&page=0&rec=100' \n For more information check: \n https://developer.mozilla.org/en-US/docs/Web/HTTP/Stat \n us/404 \n[08:55:10] Finished attempting to scrape: GLG base.py:345\n","errors":"Traceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 55, in run\n for councillor_html in self.get_councillors():\n File \"/var/task/lgsf/councillors/scrapers.py\", line 161, in get_councillors\n container = self.get_list_container()\n File \"/var/task/lgsf/councillors/scrapers.py\", line 152, in get_list_container\n self.base_url_soup = self.get_page(self.base_url)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 141, in get_page\n page = self.get(url, extra_headers=self.extra_headers).text\n File \"/var/task/lgsf/scrapers/base.py\", line 56, in get\n response.raise_for_status()\n File \"/opt/python/httpx/_models.py\", line 761, in raise_for_status\n raise HTTPStatusError(message, request=request, response=self)\nhttpx.HTTPStatusError: Client error '404 Not Found' for url 'https://www.glasgow.gov.uk/councillorsandcommittees/allMembers.asp?sort=0&page=0&rec=100'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404\n","start":"2024-10-21 08:55:07.985738","end":"2024-10-21 08:55:10.176421","duration":2}},{"council_id":"GLS","missing":false,"latest_run":{"status_code":1,"log_text":"[09:30:39] Fetching Scraper for: GLS handlers.py:23\n Begin attempting to scrape: GLS handlers.py:27\n Deleting existing data... base.py:257\n[09:30:40] Getting all files in Councillors... base.py:209\n ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n[09:30:41] ...data deleted. base.py:264\n Scraping from base.py:49\n http://glostext.gloucestershire.gov.uk//mgWebService.asmx/ \n GetCouncillorsByWard \n[09:30:56] [Errno 110] Connection timed out handlers.py:36\n[09:30:57] Finished attempting to scrape: GLS base.py:345\n","errors":"Traceback (most recent call last):\n File \"/opt/python/httpx/_transports/default.py\", line 69, in map_httpcore_exceptions\n yield\n File \"/opt/python/httpx/_transports/default.py\", line 233, in handle_request\n resp = self._pool.handle_request(req)\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 216, in handle_request\n raise exc from None\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 196, in handle_request\n response = connection.handle_request(\n File \"/opt/python/httpcore/_sync/connection.py\", line 99, in handle_request\n raise exc\n File \"/opt/python/httpcore/_sync/connection.py\", line 76, in handle_request\n stream = self._connect(request)\n File \"/opt/python/httpcore/_sync/connection.py\", line 122, in _connect\n stream = self._network_backend.connect_tcp(**kwargs)\n File \"/opt/python/httpcore/_backends/sync.py\", line 205, in connect_tcp\n with map_exceptions(exc_map):\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpcore/_exceptions.py\", line 14, in map_exceptions\n raise to_exc(exc) from exc\nhttpcore.ConnectTimeout: [Errno 110] Connection timed out\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 197, in run\n wards = self.get_councillors()\n File \"/var/task/lgsf/councillors/scrapers.py\", line 216, in get_councillors\n req = self.get(self.format_councillor_api_url())\n File \"/var/task/lgsf/scrapers/base.py\", line 55, in get\n response = self.http_client.get(url, headers=headers, timeout=30)\n File \"/opt/python/httpx/_client.py\", line 1054, in get\n return self.request(\n File \"/opt/python/httpx/_client.py\", line 827, in request\n return self.send(request, auth=auth, follow_redirects=follow_redirects)\n File \"/opt/python/httpx/_client.py\", line 914, in send\n response = self._send_handling_auth(\n File \"/opt/python/httpx/_client.py\", line 942, in _send_handling_auth\n response = self._send_handling_redirects(\n File \"/opt/python/httpx/_client.py\", line 979, in _send_handling_redirects\n response = self._send_single_request(request)\n File \"/opt/python/httpx/_client.py\", line 1015, in _send_single_request\n response = transport.handle_request(request)\n File \"/opt/python/httpx/_transports/default.py\", line 232, in handle_request\n with map_httpcore_exceptions():\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpx/_transports/default.py\", line 86, in map_httpcore_exceptions\n raise mapped_exc(message) from exc\nhttpx.ConnectTimeout: [Errno 110] Connection timed out\n","start":"2024-10-21 09:30:39.469551","end":"2024-10-21 09:30:57.070696","duration":17}},{"council_id":"GRE","missing":false,"latest_run":{"status_code":1,"log_text":"[10:41:59] Fetching Scraper for: GRE handlers.py:23\n Begin attempting to scrape: GRE handlers.py:27\n Deleting existing data... base.py:257\n[10:42:00] Getting all files in Councillors... base.py:209\n ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n ...data deleted. base.py:264\n Scraping from base.py:49\n https://committees.royalgreenwich.gov.uk/Councillors/tabid \n /63/ScreenMode/Alphabetical/Default.aspx \n[10:42:03] Client error '404 Not Found' for url handlers.py:36\n 'https://committees.royalgreenwich.gov.uk/mgError.aspx \n ' \n For more information check: \n https://developer.mozilla.org/en-US/docs/Web/HTTP/Stat \n us/404 \n Finished attempting to scrape: GRE base.py:345\n","errors":"Traceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 55, in run\n for councillor_html in self.get_councillors():\n File \"/var/task/lgsf/councillors/scrapers.py\", line 272, in get_councillors\n req = self.get(\n File \"/var/task/lgsf/scrapers/base.py\", line 56, in get\n response.raise_for_status()\n File \"/opt/python/httpx/_models.py\", line 761, in raise_for_status\n raise HTTPStatusError(message, request=request, response=self)\nhttpx.HTTPStatusError: Client error '404 Not Found' for url 'https://committees.royalgreenwich.gov.uk/mgError.aspx'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404\n","start":"2024-10-21 10:41:59.292069","end":"2024-10-21 10:42:03.676610","duration":4}},{"council_id":"KEN","missing":false,"latest_run":{"status_code":1,"log_text":"[09:56:57] Fetching Scraper for: KEN handlers.py:23\n Begin attempting to scrape: KEN handlers.py:27\n[09:56:58] Deleting existing data... base.py:257\n Getting all files in Councillors... base.py:209\n Getting all files in Councillors/json... base.py:209\n ...found 81 files in Councillors/json base.py:225\n Getting all files in Councillors/raw... base.py:209\n[09:56:59] ...found 81 files in Councillors/raw base.py:225\n ...found 163 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 100 files base.py:236\n[09:57:00] Deleting batch no. 2 consisting of 63 files base.py:236\n ...data deleted. base.py:264\n Scraping from base.py:49\n https://democracy.kent.gov.uk//mgWebService.asmx/GetCounci \n llorsByWard \n[09:57:31] The read operation timed out handlers.py:36\n Finished attempting to scrape: KEN base.py:345\n","errors":"Traceback (most recent call last):\n File \"/opt/python/httpx/_transports/default.py\", line 69, in map_httpcore_exceptions\n yield\n File \"/opt/python/httpx/_transports/default.py\", line 233, in handle_request\n resp = self._pool.handle_request(req)\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 216, in handle_request\n raise exc from None\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 196, in handle_request\n response = connection.handle_request(\n File \"/opt/python/httpcore/_sync/connection.py\", line 101, in handle_request\n return self._connection.handle_request(request)\n File \"/opt/python/httpcore/_sync/http11.py\", line 143, in handle_request\n raise exc\n File \"/opt/python/httpcore/_sync/http11.py\", line 113, in handle_request\n ) = self._receive_response_headers(**kwargs)\n File \"/opt/python/httpcore/_sync/http11.py\", line 186, in _receive_response_headers\n event = self._receive_event(timeout=timeout)\n File \"/opt/python/httpcore/_sync/http11.py\", line 224, in _receive_event\n data = self._network_stream.read(\n File \"/opt/python/httpcore/_backends/sync.py\", line 124, in read\n with map_exceptions(exc_map):\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpcore/_exceptions.py\", line 14, in map_exceptions\n raise to_exc(exc) from exc\nhttpcore.ReadTimeout: The read operation timed out\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 197, in run\n wards = self.get_councillors()\n File \"/var/task/lgsf/councillors/scrapers.py\", line 216, in get_councillors\n req = self.get(self.format_councillor_api_url())\n File \"/var/task/lgsf/scrapers/base.py\", line 55, in get\n response = self.http_client.get(url, headers=headers, timeout=30)\n File \"/opt/python/httpx/_client.py\", line 1054, in get\n return self.request(\n File \"/opt/python/httpx/_client.py\", line 827, in request\n return self.send(request, auth=auth, follow_redirects=follow_redirects)\n File \"/opt/python/httpx/_client.py\", line 914, in send\n response = self._send_handling_auth(\n File \"/opt/python/httpx/_client.py\", line 942, in _send_handling_auth\n response = self._send_handling_redirects(\n File \"/opt/python/httpx/_client.py\", line 979, in _send_handling_redirects\n response = self._send_single_request(request)\n File \"/opt/python/httpx/_client.py\", line 1015, in _send_single_request\n response = transport.handle_request(request)\n File \"/opt/python/httpx/_transports/default.py\", line 232, in handle_request\n with map_httpcore_exceptions():\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpx/_transports/default.py\", line 86, in map_httpcore_exceptions\n raise mapped_exc(message) from exc\nhttpx.ReadTimeout: The read operation timed out\n","start":"2024-10-21 09:56:57.597865","end":"2024-10-21 09:57:31.437886","duration":33}},{"council_id":"SHE","missing":false,"latest_run":{"status_code":null,"log_text":"[11:28:20] Fetching Scraper for: SHE handlers.py:22\n Begin attempting to scrape: SHE handlers.py:25\n Deleting existing data... base.py:234\n Getting all files in SHE... base.py:186\n[11:28:21] Getting all files in SHE/json... base.py:186\n ...found 30 files in SHE/json base.py:202\n Getting all files in SHE/raw... base.py:186\n ...found 30 files in SHE/raw base.py:202\n ...found 61 files in SHE base.py:202\n Deleting batch no. 1 consisting of 61 files base.py:211\n[11:28:32] An error occurred (ThrottlingException) when calling handlers.py:34\n the CreateCommit operation (reached max retries: 4): \n Rate exceeded \n Finished attempting to scrape: SHE base.py:319\n","errors":"An error occurred (ThrottlingException) when calling the CreateCommit operation (reached max retries: 4): Rate exceeded","start":"2022-04-04 11:28:20.509898","end":"2022-04-04 11:28:32.871624","duration":12}},{"council_id":"STG","missing":false,"latest_run":{"status_code":1,"log_text":"[09:10:10] Fetching Scraper for: STG handlers.py:23\n Begin attempting to scrape: STG handlers.py:27\n Deleting existing data... base.py:257\n[09:10:11] Getting all files in Councillors... base.py:209\n Getting all files in Councillors/json... base.py:209\n ...found 19 files in Councillors/json base.py:225\n Getting all files in Councillors/raw... base.py:209\n ...found 19 files in Councillors/raw base.py:225\n ...found 39 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 39 files base.py:236\n[09:10:12] ...data deleted. base.py:264\n Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/politic \n ians-and-elections/councillors/ \n[09:10:13] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/elaine-watterson/ \n[09:10:15] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/gene-maxwell/ \n[09:10:16] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/martin-earl/ \n[09:10:17] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/gerry-mcgarvey/ \n[09:10:18] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/paul-henke/ \n[09:10:21] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/rosemary-fraser/ \n[09:10:22] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/alasdair-tollemache/ \n[09:10:23] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/david-wilson/ \n[09:10:24] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/robin-kleinman/ \n[09:10:26] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/thomas-heald/ \n[09:10:27] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/danny-gibson/ \n[09:10:28] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/jim-thomson/ \n[09:10:29] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/rachel-nunn/ \n[09:10:30] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/susan-mcgill/ \n[09:10:32] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/jen-preston/ \n[09:10:33] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/neil-benny/ \n[09:10:34] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/scott-farmer/ \n[09:10:35] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/bryan-flannagan/ \n[09:10:37] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/gerry-mclaughlan/ \n[09:10:38] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/vacant/ \n[09:10:39] 'NoneType' object is not subscriptable handlers.py:36\n Committing batch 1 consisting of 38 files base.py:297\n[09:10:40] Finished attempting to scrape: STG base.py:345\n","errors":"Traceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 57, in run\n councillor = self.get_single_councillor(councillor_html)\n File \"scrapers/STG-stirling/councillors.py\", line 42, in get_single_councillor\n councillor.email = soup.select_one(\"a[href^=mailto]\")[\nTypeError: 'NoneType' object is not subscriptable\n","start":"2024-10-21 09:10:10.326444","end":"2024-10-21 09:10:40.738509","duration":30}},{"council_id":"STR","missing":false,"latest_run":{"status_code":1,"log_text":"[09:40:00] Fetching Scraper for: STR handlers.py:23\n Begin attempting to scrape: STR handlers.py:27\n Deleting existing data... base.py:257\n[09:40:01] Getting all files in Councillors... base.py:209\n ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n[09:40:02] ...data deleted. base.py:264\n Scraping from base.py:49\n https://democracy.stratford.gov.uk/mgWebService.asmx/GetCo \n uncillorsByWard \n[09:40:32] The read operation timed out handlers.py:36\n Finished attempting to scrape: STR base.py:345\n","errors":"Traceback (most recent call last):\n File \"/opt/python/httpx/_transports/default.py\", line 69, in map_httpcore_exceptions\n yield\n File \"/opt/python/httpx/_transports/default.py\", line 233, in handle_request\n resp = self._pool.handle_request(req)\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 216, in handle_request\n raise exc from None\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 196, in handle_request\n response = connection.handle_request(\n File \"/opt/python/httpcore/_sync/connection.py\", line 101, in handle_request\n return self._connection.handle_request(request)\n File \"/opt/python/httpcore/_sync/http11.py\", line 143, in handle_request\n raise exc\n File \"/opt/python/httpcore/_sync/http11.py\", line 113, in handle_request\n ) = self._receive_response_headers(**kwargs)\n File \"/opt/python/httpcore/_sync/http11.py\", line 186, in _receive_response_headers\n event = self._receive_event(timeout=timeout)\n File \"/opt/python/httpcore/_sync/http11.py\", line 224, in _receive_event\n data = self._network_stream.read(\n File \"/opt/python/httpcore/_backends/sync.py\", line 124, in read\n with map_exceptions(exc_map):\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpcore/_exceptions.py\", line 14, in map_exceptions\n raise to_exc(exc) from exc\nhttpcore.ReadTimeout: The read operation timed out\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 197, in run\n wards = self.get_councillors()\n File \"/var/task/lgsf/councillors/scrapers.py\", line 216, in get_councillors\n req = self.get(self.format_councillor_api_url())\n File \"/var/task/lgsf/scrapers/base.py\", line 55, in get\n response = self.http_client.get(url, headers=headers, timeout=30)\n File \"/opt/python/httpx/_client.py\", line 1054, in get\n return self.request(\n File \"/opt/python/httpx/_client.py\", line 827, in request\n return self.send(request, auth=auth, follow_redirects=follow_redirects)\n File \"/opt/python/httpx/_client.py\", line 914, in send\n response = self._send_handling_auth(\n File \"/opt/python/httpx/_client.py\", line 942, in _send_handling_auth\n response = self._send_handling_redirects(\n File \"/opt/python/httpx/_client.py\", line 979, in _send_handling_redirects\n response = self._send_single_request(request)\n File \"/opt/python/httpx/_client.py\", line 1015, in _send_single_request\n response = transport.handle_request(request)\n File \"/opt/python/httpx/_transports/default.py\", line 232, in handle_request\n with map_httpcore_exceptions():\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpx/_transports/default.py\", line 86, in map_httpcore_exceptions\n raise mapped_exc(message) from exc\nhttpx.ReadTimeout: The read operation timed out\n","start":"2024-10-21 09:40:00.288716","end":"2024-10-21 09:40:32.601674","duration":32}},{"council_id":"TEW","missing":false,"latest_run":{"status_code":1,"log_text":"[08:36:31] Fetching Scraper for: TEW handlers.py:23\n Begin attempting to scrape: TEW handlers.py:27\n Deleting existing data... base.py:257\n[08:36:32] Getting all files in Councillors... base.py:209\n ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n[08:36:33] ...data deleted. base.py:264\n Scraping from base.py:49\n http://minutes.tewkesbury.gov.uk/mgWebService.asmx/GetCoun \n cillorsByWard \n Client error '403 Forbidden' for url handlers.py:36\n 'http://minutes.tewkesbury.gov.uk/mgWebService.asmx/Ge \n tCouncillorsByWard' \n For more information check: \n https://developer.mozilla.org/en-US/docs/Web/HTTP/Stat \n us/403 \n Finished attempting to scrape: TEW base.py:345\n","errors":"Traceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 197, in run\n wards = self.get_councillors()\n File \"/var/task/lgsf/councillors/scrapers.py\", line 216, in get_councillors\n req = self.get(self.format_councillor_api_url())\n File \"/var/task/lgsf/scrapers/base.py\", line 56, in get\n response.raise_for_status()\n File \"/opt/python/httpx/_models.py\", line 761, in raise_for_status\n raise HTTPStatusError(message, request=request, response=self)\nhttpx.HTTPStatusError: Client error '403 Forbidden' for url 'http://minutes.tewkesbury.gov.uk/mgWebService.asmx/GetCouncillorsByWard'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/403\n","start":"2024-10-21 08:36:31.256968","end":"2024-10-21 08:36:33.479058","duration":2}},{"council_id":"THE","missing":false,"latest_run":{"status_code":1,"log_text":"[10:48:07] Fetching Scraper for: THE handlers.py:23\n Begin attempting to scrape: THE handlers.py:27\n[10:48:08] Deleting existing data... base.py:257\n Getting all files in Councillors... base.py:209\n ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n[10:48:09] ...data deleted. base.py:264\n Scraping from base.py:49\n https://www.threerivers.gov.uk/listing/councillors \n[10:48:12] 'NoneType' object has no attribute 'findNext' handlers.py:36\n[10:48:13] Finished attempting to scrape: THE base.py:345\n","errors":"Traceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 55, in run\n for councillor_html in self.get_councillors():\n File \"/var/task/lgsf/councillors/scrapers.py\", line 161, in get_councillors\n container = self.get_list_container()\n File \"scrapers/THE-three-rivers/councillors.py\", line 15, in get_list_container\n return soup.find(\"h3\", text=\"District Councillor\").findNext(\"ul\")\nAttributeError: 'NoneType' object has no attribute 'findNext'\n","start":"2024-10-21 10:48:07.841764","end":"2024-10-21 10:48:13.122021","duration":5}},{"council_id":"VGL","missing":false,"latest_run":{"status_code":1,"log_text":"[08:59:26] Fetching Scraper for: VGL handlers.py:23\n Begin attempting to scrape: VGL handlers.py:27\n[08:59:27] Deleting existing data... base.py:257\n Getting all files in Councillors... base.py:209\n Getting all files in Councillors/json... base.py:209\n[08:59:28] ...found 16 files in Councillors/json base.py:225\n Getting all files in Councillors/raw... base.py:209\n ...found 16 files in Councillors/raw base.py:225\n ...found 33 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 33 files base.py:236\n[08:59:29] ...data deleted. base.py:264\n Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Councillors.aspx \n[08:59:31] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Asbrey-Anne.aspx \n[08:59:32] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Aviet-Julie.aspx \n[08:59:34] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Ball-Gareth.aspx \n[08:59:35] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Birch-Rhiannon.aspx \n[08:59:37] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Brooks-Bronwen.aspx \n[08:59:38] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Bruce-Gillian.aspx \n[08:59:40] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Buckley-Ian.aspx \n[08:59:42] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Burnett-Lis.aspx \n[08:59:45] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Campbell-Samantha.aspx \n[08:59:46] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Carroll-George.aspx \n[08:59:48] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Cave-Christine.aspx \n[08:59:50] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Champion-Charles.aspx \n[08:59:51] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Charles-Janice.aspx \n[08:59:53] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Collins-Amelia.aspx \n[08:59:54] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Cowpe-Marianne.aspx \n[08:59:56] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Drake-Pamela.aspx \n[08:59:57] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Driscoll-Vincent.aspx \n[08:59:59] 'NoneType' object has no attribute 'get_text' handlers.py:36\n Committing batch 1 consisting of 32 files base.py:297\n[09:00:01] Finished attempting to scrape: VGL base.py:345\n","errors":"Traceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 57, in run\n councillor = self.get_single_councillor(councillor_html)\n File \"scrapers/VGL-the-vale-of-glamorgan/councillors.py\", line 36, in get_single_councillor\n email_text = soup.select_one(\"#S4_EmailPlaceholder\").get_text(\nAttributeError: 'NoneType' object has no attribute 'get_text'\n","start":"2024-10-21 08:59:26.695532","end":"2024-10-21 09:00:01.055459","duration":34}},{"council_id":"WBK","missing":false,"latest_run":{"status_code":1,"log_text":"[10:26:49] Fetching Scraper for: WBK handlers.py:23\n Begin attempting to scrape: WBK handlers.py:27\n Deleting existing data... base.py:257\n[10:26:50] Getting all files in Councillors... base.py:209\n ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n[10:26:51] ...data deleted. base.py:264\n Scraping from base.py:49\n http://decisionmaking.westberks.gov.uk/mgWebService.asmx/G \n etCouncillorsByWard \n[10:27:21] The read operation timed out handlers.py:36\n Finished attempting to scrape: WBK base.py:345\n","errors":"Traceback (most recent call last):\n File \"/opt/python/httpx/_transports/default.py\", line 69, in map_httpcore_exceptions\n yield\n File \"/opt/python/httpx/_transports/default.py\", line 233, in handle_request\n resp = self._pool.handle_request(req)\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 216, in handle_request\n raise exc from None\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 196, in handle_request\n response = connection.handle_request(\n File \"/opt/python/httpcore/_sync/connection.py\", line 101, in handle_request\n return self._connection.handle_request(request)\n File \"/opt/python/httpcore/_sync/http11.py\", line 143, in handle_request\n raise exc\n File \"/opt/python/httpcore/_sync/http11.py\", line 113, in handle_request\n ) = self._receive_response_headers(**kwargs)\n File \"/opt/python/httpcore/_sync/http11.py\", line 186, in _receive_response_headers\n event = self._receive_event(timeout=timeout)\n File \"/opt/python/httpcore/_sync/http11.py\", line 224, in _receive_event\n data = self._network_stream.read(\n File \"/opt/python/httpcore/_backends/sync.py\", line 124, in read\n with map_exceptions(exc_map):\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpcore/_exceptions.py\", line 14, in map_exceptions\n raise to_exc(exc) from exc\nhttpcore.ReadTimeout: The read operation timed out\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 197, in run\n wards = self.get_councillors()\n File \"/var/task/lgsf/councillors/scrapers.py\", line 216, in get_councillors\n req = self.get(self.format_councillor_api_url())\n File \"/var/task/lgsf/scrapers/base.py\", line 55, in get\n response = self.http_client.get(url, headers=headers, timeout=30)\n File \"/opt/python/httpx/_client.py\", line 1054, in get\n return self.request(\n File \"/opt/python/httpx/_client.py\", line 827, in request\n return self.send(request, auth=auth, follow_redirects=follow_redirects)\n File \"/opt/python/httpx/_client.py\", line 914, in send\n response = self._send_handling_auth(\n File \"/opt/python/httpx/_client.py\", line 942, in _send_handling_auth\n response = self._send_handling_redirects(\n File \"/opt/python/httpx/_client.py\", line 979, in _send_handling_redirects\n response = self._send_single_request(request)\n File \"/opt/python/httpx/_client.py\", line 1015, in _send_single_request\n response = transport.handle_request(request)\n File \"/opt/python/httpx/_transports/default.py\", line 232, in handle_request\n with map_httpcore_exceptions():\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpx/_transports/default.py\", line 86, in map_httpcore_exceptions\n raise mapped_exc(message) from exc\nhttpx.ReadTimeout: The read operation timed out\n","start":"2024-10-21 10:26:49.301937","end":"2024-10-21 10:27:21.549858","duration":32}},{"council_id":"WLN","missing":false,"latest_run":{"status_code":1,"log_text":"[09:09:29] Fetching Scraper for: WLN handlers.py:23\n Begin attempting to scrape: WLN handlers.py:27\n[09:09:30] Deleting existing data... base.py:257\n Getting all files in Councillors... base.py:209\n Getting all files in Councillors/json... base.py:209\n ...found 25 files in Councillors/json base.py:225\n Getting all files in Councillors/raw... base.py:209\n ...found 25 files in Councillors/raw base.py:225\n[09:09:31] ...found 51 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 51 files base.py:236\n ...data deleted. base.py:264\n Scraping from https://westlothian.gov.uk/councillors base.py:49\n[09:09:34] Scraping from base.py:49\n https://westlothian.gov.uk/article/33888/Linlithgow \n[09:09:35] Scraping from base.py:49\n https://westlothian.gov.uk/article/33889/Broxburn-Uphall-a \n nd-Winchburgh \n[09:09:36] Scraping from base.py:49\n https://westlothian.gov.uk/article/33890/Livingston-North \n Scraping from base.py:49\n https://westlothian.gov.uk/article/33891/Livingston-South \n[09:09:37] Scraping from base.py:49\n https://westlothian.gov.uk/article/33893/East-Livingston-a \n nd-East-Calder \n[09:09:38] Scraping from base.py:49\n https://westlothian.gov.uk/article/33892/Fauldhouse-and-th \n e-Breich-Valley \n Scraping from base.py:49\n https://westlothian.gov.uk/article/33894/Whitburn-and-Blac \n kburn \n[09:09:39] Scraping from base.py:49\n https://westlothian.gov.uk/article/33895/Bathgate \n[09:09:40] Scraping from base.py:49\n https://westlothian.gov.uk/article/33896/Armadale-and-Blac \n kridge \n[09:09:41] Scraping from base.py:49\n https://westlothian.gov.uk/article/33897/Councillor-Tom-Co \n nn \n Scraping from base.py:49\n https://westlothian.gov.uk/article/33898/Councillor-Paulin \n e-Orr \n[09:09:42] Scraping from base.py:49\n https://westlothian.gov.uk/article/33899/Councillor-Sally- \n Pattle \n[09:09:44] Scraping from base.py:49\n https://westlothian.gov.uk/article/34305/Councillor-Tony-B \n oyle \n[09:09:45] Scraping from base.py:49\n https://westlothian.gov.uk/article/34302/Councillor-Diane- \n Calder \n[09:09:46] Scraping from base.py:49\n https://westlothian.gov.uk/article/34303/Councillor-Janet- \n Campbell \n[09:09:47] Scraping from base.py:49\n https://westlothian.gov.uk/article/34304/Councillor-Angela \n -Doran-Timson \n[09:09:48] Scraping from base.py:49\n https://westlothian.gov.uk/article/34307/Councillor-Alison \n -Adamson \n[09:09:49] Scraping from base.py:49\n https://westlothian.gov.uk/article/34306/Councillor-Robert \n -De-Bold \n[09:09:50] Scraping from base.py:49\n https://westlothian.gov.uk/article/34308/Councillor-Anne-M \n cMillan \n Scraping from base.py:49\n https://westlothian.gov.uk/article/34309/Councillor-Andrew \n -Miller \n[09:09:51] Scraping from base.py:49\n https://westlothian.gov.uk/article/34311/Councillor-Lawren \n ce-Fitzpatrick \n[09:09:52] Scraping from base.py:49\n https://westlothian.gov.uk/article/34310/Councillor-Peter- \n Heggie \n[09:09:53] Scraping from base.py:49\n https://westlothian.gov.uk/article/34312/Councillor-Maria- \n MacAulay \n[09:09:54] Scraping from base.py:49\n https://westlothian.gov.uk/article/34313/Councillor-Moira- \n McKee-Shemilt \n[09:09:55] Scraping from base.py:49\n https://westlothian.gov.uk/article/34317/Councillor-Damian \n -Doran-Timson \n[09:09:56] Scraping from base.py:49\n https://westlothian.gov.uk/article/34315/Councillor-Carl-J \n ohn \n Scraping from base.py:49\n https://westlothian.gov.uk/article/34316/Councillor-Danny- \n Logue \n[09:09:57] Scraping from base.py:49\n https://westlothian.gov.uk/article/34314/Councillor-Veroni \n ca-Smith \n[09:09:58] Scraping from base.py:49\n https://westlothian.gov.uk/article/34318/Councillor-Paulin \n e-Clark \n[09:09:59] Scraping from base.py:49\n https://westlothian.gov.uk/article/34319/Councillor-Craig- \n Meek \n[09:10:00] Scraping from base.py:49\n https://westlothian.gov.uk/article/34320/Councillor-Cathy- \n Muldoon \n[09:10:01] Scraping from base.py:49\n https://westlothian.gov.uk/article/34321/Councillor-Jim-Di \n ckson \n[09:10:02] Scraping from base.py:49\n https://westlothian.gov.uk/article/34322/Councillor-Mary-D \n ickson \n Scraping from base.py:49\n https://westlothian.gov.uk/article/34323/Councillor-George \n -Paul \n[09:10:03] Scraping from base.py:49\n https://westlothian.gov.uk/article/34324/Councillor-Vacant \n[09:10:04] list index out of range handlers.py:36\n Committing batch 1 consisting of 50 files base.py:297\n[09:10:05] Finished attempting to scrape: WLN base.py:345\n","errors":"Traceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 57, in run\n councillor = self.get_single_councillor(councillor_html)\n File \"scrapers/WLN-west-lothian/councillors.py\", line 37, in get_single_councillor\n councillor.email = soup.select(\"a[href^=mailto]\")[0].get_text(\nIndexError: list index out of range\n","start":"2024-10-21 09:09:29.760226","end":"2024-10-21 09:10:05.962570","duration":36}}] +[{"council_id":"BDG","missing":false,"latest_run":{"status_code":1,"log_text":"[10:40:18] Fetching Scraper for: BDG handlers.py:23\n Begin attempting to scrape: BDG handlers.py:27\n Deleting existing data... base.py:257\n[10:40:19] Getting all files in Councillors... base.py:209\n ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n[10:40:20] ...data deleted. base.py:264\n Scraping from base.py:49\n https://modgov.lbbd.gov.uk/internet/mgWebService.asmx/GetC \n ouncillorsByWard \n[10:40:35] [Errno 110] Connection timed out handlers.py:36\n Finished attempting to scrape: BDG base.py:345\n","errors":"Traceback (most recent call last):\n File \"/opt/python/httpx/_transports/default.py\", line 69, in map_httpcore_exceptions\n yield\n File \"/opt/python/httpx/_transports/default.py\", line 233, in handle_request\n resp = self._pool.handle_request(req)\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 216, in handle_request\n raise exc from None\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 196, in handle_request\n response = connection.handle_request(\n File \"/opt/python/httpcore/_sync/connection.py\", line 99, in handle_request\n raise exc\n File \"/opt/python/httpcore/_sync/connection.py\", line 76, in handle_request\n stream = self._connect(request)\n File \"/opt/python/httpcore/_sync/connection.py\", line 122, in _connect\n stream = self._network_backend.connect_tcp(**kwargs)\n File \"/opt/python/httpcore/_backends/sync.py\", line 205, in connect_tcp\n with map_exceptions(exc_map):\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpcore/_exceptions.py\", line 14, in map_exceptions\n raise to_exc(exc) from exc\nhttpcore.ConnectTimeout: [Errno 110] Connection timed out\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 197, in run\n wards = self.get_councillors()\n File \"/var/task/lgsf/councillors/scrapers.py\", line 216, in get_councillors\n req = self.get(self.format_councillor_api_url())\n File \"/var/task/lgsf/scrapers/base.py\", line 55, in get\n response = self.http_client.get(url, headers=headers, timeout=30)\n File \"/opt/python/httpx/_client.py\", line 1054, in get\n return self.request(\n File \"/opt/python/httpx/_client.py\", line 827, in request\n return self.send(request, auth=auth, follow_redirects=follow_redirects)\n File \"/opt/python/httpx/_client.py\", line 914, in send\n response = self._send_handling_auth(\n File \"/opt/python/httpx/_client.py\", line 942, in _send_handling_auth\n response = self._send_handling_redirects(\n File \"/opt/python/httpx/_client.py\", line 979, in _send_handling_redirects\n response = self._send_single_request(request)\n File \"/opt/python/httpx/_client.py\", line 1015, in _send_single_request\n response = transport.handle_request(request)\n File \"/opt/python/httpx/_transports/default.py\", line 232, in handle_request\n with map_httpcore_exceptions():\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpx/_transports/default.py\", line 86, in map_httpcore_exceptions\n raise mapped_exc(message) from exc\nhttpx.ConnectTimeout: [Errno 110] Connection timed out\n","start":"2024-10-22 10:40:18.524844","end":"2024-10-22 10:40:35.934013","duration":17}},{"council_id":"BOL","missing":false,"latest_run":{"status_code":1,"log_text":"[10:18:12] Fetching Scraper for: BOL handlers.py:23\n Begin attempting to scrape: BOL handlers.py:27\n Deleting existing data... base.py:257\n[10:18:13] Getting all files in Councillors... base.py:209\n ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n[10:18:14] ...data deleted. base.py:264\n Scraping from base.py:49\n https://www.democracy.bolton.gov.uk/cmis5/People.aspx \n [Errno -2] Name or service not known handlers.py:36\n Finished attempting to scrape: BOL base.py:345\n","errors":"Traceback (most recent call last):\n File \"/opt/python/httpx/_transports/default.py\", line 69, in map_httpcore_exceptions\n yield\n File \"/opt/python/httpx/_transports/default.py\", line 233, in handle_request\n resp = self._pool.handle_request(req)\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 216, in handle_request\n raise exc from None\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 196, in handle_request\n response = connection.handle_request(\n File \"/opt/python/httpcore/_sync/connection.py\", line 99, in handle_request\n raise exc\n File \"/opt/python/httpcore/_sync/connection.py\", line 76, in handle_request\n stream = self._connect(request)\n File \"/opt/python/httpcore/_sync/connection.py\", line 122, in _connect\n stream = self._network_backend.connect_tcp(**kwargs)\n File \"/opt/python/httpcore/_backends/sync.py\", line 205, in connect_tcp\n with map_exceptions(exc_map):\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpcore/_exceptions.py\", line 14, in map_exceptions\n raise to_exc(exc) from exc\nhttpcore.ConnectError: [Errno -2] Name or service not known\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 55, in run\n for councillor_html in self.get_councillors():\n File \"/var/task/lgsf/councillors/scrapers.py\", line 272, in get_councillors\n req = self.get(\n File \"/var/task/lgsf/scrapers/base.py\", line 55, in get\n response = self.http_client.get(url, headers=headers, timeout=30)\n File \"/opt/python/httpx/_client.py\", line 1054, in get\n return self.request(\n File \"/opt/python/httpx/_client.py\", line 827, in request\n return self.send(request, auth=auth, follow_redirects=follow_redirects)\n File \"/opt/python/httpx/_client.py\", line 914, in send\n response = self._send_handling_auth(\n File \"/opt/python/httpx/_client.py\", line 942, in _send_handling_auth\n response = self._send_handling_redirects(\n File \"/opt/python/httpx/_client.py\", line 979, in _send_handling_redirects\n response = self._send_single_request(request)\n File \"/opt/python/httpx/_client.py\", line 1015, in _send_single_request\n response = transport.handle_request(request)\n File \"/opt/python/httpx/_transports/default.py\", line 232, in handle_request\n with map_httpcore_exceptions():\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpx/_transports/default.py\", line 86, in map_httpcore_exceptions\n raise mapped_exc(message) from exc\nhttpx.ConnectError: [Errno -2] Name or service not known\n","start":"2024-10-22 10:18:12.447732","end":"2024-10-22 10:18:14.647235","duration":2}},{"council_id":"CAN","missing":false,"latest_run":{"status_code":1,"log_text":"[09:15:49] Fetching Scraper for: CAN handlers.py:23\n Begin attempting to scrape: CAN handlers.py:27\n Deleting existing data... base.py:257\n[09:15:50] Getting all files in Councillors... base.py:209\n ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n[09:15:51] ...data deleted. base.py:264\n Scraping from base.py:49\n https://www.cannockchasedc.gov.uk/council/about-council/yo \n ur-councillors \n[09:15:53] list index out of range handlers.py:36\n Finished attempting to scrape: CAN base.py:345\n","errors":"Traceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 55, in run\n for councillor_html in self.get_councillors():\n File \"/var/task/lgsf/councillors/scrapers.py\", line 161, in get_councillors\n container = self.get_list_container()\n File \"/var/task/lgsf/councillors/scrapers.py\", line 158, in get_list_container\n return selected[0]\nIndexError: list index out of range\n","start":"2024-10-22 09:15:49.280787","end":"2024-10-22 09:15:53.803560","duration":4}},{"council_id":"CAS","missing":false,"latest_run":{"status_code":1,"log_text":"[10:43:45] Fetching Scraper for: CAS handlers.py:23\n Begin attempting to scrape: CAS handlers.py:27\n[10:43:46] Deleting existing data... base.py:257\n Getting all files in Councillors... base.py:209\n[10:43:47] ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n ...data deleted. base.py:264\n Scraping from https://www.castlepoint.gov.uk/councillors base.py:49\n[10:43:49] Scraping from base.py:49\n https://www.castlepoint.gov.ukhttps://castlepoint.cmis.uk. \n com/castlepoint/Committees/CurrentCommittees.aspx?a=1 \n [Errno -2] Name or service not known handlers.py:36\n Finished attempting to scrape: CAS base.py:345\n","errors":"Traceback (most recent call last):\n File \"/opt/python/httpx/_transports/default.py\", line 69, in map_httpcore_exceptions\n yield\n File \"/opt/python/httpx/_transports/default.py\", line 233, in handle_request\n resp = self._pool.handle_request(req)\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 216, in handle_request\n raise exc from None\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 196, in handle_request\n response = connection.handle_request(\n File \"/opt/python/httpcore/_sync/connection.py\", line 99, in handle_request\n raise exc\n File \"/opt/python/httpcore/_sync/connection.py\", line 76, in handle_request\n stream = self._connect(request)\n File \"/opt/python/httpcore/_sync/connection.py\", line 122, in _connect\n stream = self._network_backend.connect_tcp(**kwargs)\n File \"/opt/python/httpcore/_backends/sync.py\", line 205, in connect_tcp\n with map_exceptions(exc_map):\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpcore/_exceptions.py\", line 14, in map_exceptions\n raise to_exc(exc) from exc\nhttpcore.ConnectError: [Errno -2] Name or service not known\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 57, in run\n councillor = self.get_single_councillor(councillor_html)\n File \"scrapers/CAS-castle-point/councillors.py\", line 15, in get_single_councillor\n soup = self.get_page(url)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 141, in get_page\n page = self.get(url, extra_headers=self.extra_headers).text\n File \"/var/task/lgsf/scrapers/base.py\", line 55, in get\n response = self.http_client.get(url, headers=headers, timeout=30)\n File \"/opt/python/httpx/_client.py\", line 1054, in get\n return self.request(\n File \"/opt/python/httpx/_client.py\", line 827, in request\n return self.send(request, auth=auth, follow_redirects=follow_redirects)\n File \"/opt/python/httpx/_client.py\", line 914, in send\n response = self._send_handling_auth(\n File \"/opt/python/httpx/_client.py\", line 942, in _send_handling_auth\n response = self._send_handling_redirects(\n File \"/opt/python/httpx/_client.py\", line 979, in _send_handling_redirects\n response = self._send_single_request(request)\n File \"/opt/python/httpx/_client.py\", line 1015, in _send_single_request\n response = transport.handle_request(request)\n File \"/opt/python/httpx/_transports/default.py\", line 232, in handle_request\n with map_httpcore_exceptions():\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpx/_transports/default.py\", line 86, in map_httpcore_exceptions\n raise mapped_exc(message) from exc\nhttpx.ConnectError: [Errno -2] Name or service not known\n","start":"2024-10-22 10:43:45.827412","end":"2024-10-22 10:43:49.634308","duration":3}},{"council_id":"EAY","missing":false,"latest_run":{"status_code":1,"log_text":"[08:21:29] Fetching Scraper for: EAY handlers.py:23\n Begin attempting to scrape: EAY handlers.py:27\n Deleting existing data... base.py:257\n Getting all files in Councillors... base.py:209\n[08:21:30] ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n ...data deleted. base.py:264\n Scraping from base.py:49\n https://www.east-ayrshire.gov.uk/CouncilAndGovernment/Abou \n t-the-Council/Councillors-and-Provost/YourCouncillor.aspx \n[08:21:31] Scraping from base.py:49\n https://www.east-ayrshire.gov.uk/CouncilAndGovernment/Abou \n t-the-Council/Councillors-and-Provost/YourCouncillor.aspx? \n 9 \n[08:21:32] 'NoneType' object has no attribute 'find_parent' handlers.py:36\n[08:21:33] Finished attempting to scrape: EAY base.py:345\n","errors":"Traceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 57, in run\n councillor = self.get_single_councillor(councillor_html)\n File \"scrapers/EAY-east-ayrshire/councillors.py\", line 22, in get_single_councillor\n .find_parent(\"div\")\nAttributeError: 'NoneType' object has no attribute 'find_parent'\n","start":"2024-10-22 08:21:29.099350","end":"2024-10-22 08:21:33.264225","duration":4}},{"council_id":"FYL","missing":false,"latest_run":{"status_code":1,"log_text":"[10:37:14] Fetching Scraper for: FYL handlers.py:23\n Begin attempting to scrape: FYL handlers.py:27\n Deleting existing data... base.py:257\n[10:37:15] Getting all files in Councillors... base.py:209\n Getting all files in Councillors/json... base.py:209\n ...found 30 files in Councillors/json base.py:225\n Getting all files in Councillors/raw... base.py:209\n ...found 30 files in Councillors/raw base.py:225\n ...found 61 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 61 files base.py:236\n[10:37:16] ...data deleted. base.py:264\n Scraping from base.py:49\n https://fylde.cmis.uk.com/fylde/CouncillorsandMP.aspx \n[10:37:18] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/48/ScreenMode/Alphabetical/D \n efault.aspx \n[10:37:21] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/48/ScreenMode/Alphabetical/D \n efault.aspx \n[10:37:23] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/148/ScreenMode/Alphabetical/ \n Default.aspx \n[10:37:25] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/148/ScreenMode/Alphabetical/ \n Default.aspx \n[10:37:29] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/84/ScreenMode/Alphabetical/D \n efault.aspx \n[10:37:32] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/84/ScreenMode/Alphabetical/D \n efault.aspx \n[10:37:34] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/211/ScreenMode/Alphabetical/ \n Default.aspx \n[10:37:38] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/211/ScreenMode/Alphabetical/ \n Default.aspx \n[10:37:39] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/207/ScreenMode/Alphabetical/ \n Default.aspx \n[10:37:41] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/207/ScreenMode/Alphabetical/ \n Default.aspx \n[10:37:42] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/52/ScreenMode/Alphabetical/D \n efault.aspx \n[10:37:47] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/52/ScreenMode/Alphabetical/D \n efault.aspx \n[10:37:48] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/208/ScreenMode/Alphabetical/ \n Default.aspx \n[10:37:51] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/208/ScreenMode/Alphabetical/ \n Default.aspx \n[10:37:52] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/43/ScreenMode/Alphabetical/D \n efault.aspx \n[10:37:55] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/43/ScreenMode/Alphabetical/D \n efault.aspx \n[10:37:57] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/172/ScreenMode/Alphabetical/ \n Default.aspx \n[10:38:00] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/172/ScreenMode/Alphabetical/ \n Default.aspx \n[10:38:01] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/213/ScreenMode/Alphabetical/ \n Default.aspx \n[10:38:04] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/213/ScreenMode/Alphabetical/ \n Default.aspx \n[10:38:05] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/209/ScreenMode/Alphabetical/ \n Default.aspx \n[10:38:08] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/209/ScreenMode/Alphabetical/ \n Default.aspx \n[10:38:11] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/15/ScreenMode/Alphabetical/D \n efault.aspx \n[10:38:15] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/15/ScreenMode/Alphabetical/D \n efault.aspx \n[10:38:16] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/206/ScreenMode/Alphabetical/ \n Default.aspx \n[10:38:19] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/206/ScreenMode/Alphabetical/ \n Default.aspx \n[10:38:20] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/174/ScreenMode/Alphabetical/ \n Default.aspx \n[10:38:23] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/174/ScreenMode/Alphabetical/ \n Default.aspx \n[10:38:24] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/14/ScreenMode/Alphabetical/D \n efault.aspx \n[10:38:27] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/14/ScreenMode/Alphabetical/D \n efault.aspx \n[10:38:28] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/186/ScreenMode/Alphabetical/ \n Default.aspx \n[10:38:31] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/186/ScreenMode/Alphabetical/ \n Default.aspx \n[10:38:33] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/176/ScreenMode/Alphabetical/ \n Default.aspx \n[10:38:38] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/176/ScreenMode/Alphabetical/ \n Default.aspx \n[10:38:39] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/21/ScreenMode/Alphabetical/D \n efault.aspx \n[10:38:42] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/21/ScreenMode/Alphabetical/D \n efault.aspx \n[10:38:43] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/35/ScreenMode/Alphabetical/D \n efault.aspx \n[10:38:46] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/35/ScreenMode/Alphabetical/D \n efault.aspx \n[10:38:47] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/37/ScreenMode/Alphabetical/D \n efault.aspx \n[10:38:50] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/37/ScreenMode/Alphabetical/D \n efault.aspx \n[10:38:52] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/153/ScreenMode/Alphabetical/ \n Default.aspx \n[10:38:55] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/153/ScreenMode/Alphabetical/ \n Default.aspx \n[10:38:56] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/212/ScreenMode/Alphabetical/ \n Default.aspx \n[10:39:00] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/212/ScreenMode/Alphabetical/ \n Default.aspx \n[10:39:02] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/187/ScreenMode/Alphabetical/ \n Default.aspx \n[10:39:05] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/187/ScreenMode/Alphabetical/ \n Default.aspx \n[10:39:06] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/24/ScreenMode/Alphabetical/D \n efault.aspx \n[10:39:09] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/24/ScreenMode/Alphabetical/D \n efault.aspx \n[10:39:10] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/177/ScreenMode/Alphabetical/ \n Default.aspx \n[10:39:13] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/177/ScreenMode/Alphabetical/ \n Default.aspx \n[10:39:14] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/16/ScreenMode/Alphabetical/D \n efault.aspx \n[10:39:18] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/16/ScreenMode/Alphabetical/D \n efault.aspx \n[10:39:19] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/167/ScreenMode/Alphabetical/ \n Default.aspx \n[10:39:25] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/167/ScreenMode/Alphabetical/ \n Default.aspx \n[10:39:26] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/99/ScreenMode/Alphabetical/D \n efault.aspx \n[10:39:30] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/99/ScreenMode/Alphabetical/D \n efault.aspx \n[10:39:32] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/34/ScreenMode/Alphabetical/D \n efault.aspx \n[10:39:35] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/34/ScreenMode/Alphabetical/D \n efault.aspx \n[10:39:37] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/210/ScreenMode/Alphabetical/ \n Default.aspx \n[10:39:40] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/210/ScreenMode/Alphabetical/ \n Default.aspx \n[10:39:41] Scraping from base.py:49\n http://fylde.cmis.uk.com/fylde/CouncillorsandMP/tabid/63/c \n tl/ViewCMIS_Person/mid/383/id/221/ScreenMode/Alphabetical/ \n Default.aspx \n[10:39:43] 'NoneType' object has no attribute 'parent' handlers.py:36\n Committing batch 1 consisting of 60 files base.py:297\n[10:39:44] Finished attempting to scrape: FYL base.py:345\n","errors":"Traceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 57, in run\n councillor = self.get_single_councillor(councillor_html)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 300, in get_single_councillor\n party = self.get_party_name(list_page_html)\n File \"scrapers/FYL-fylde/councillors.py\", line 17, in get_party_name\n .parent.get_text(strip=True)\nAttributeError: 'NoneType' object has no attribute 'parent'\n","start":"2024-10-22 10:37:14.246932","end":"2024-10-22 10:39:44.864877","duration":150}},{"council_id":"GLG","missing":false,"latest_run":{"status_code":1,"log_text":"[08:44:12] Fetching Scraper for: GLG handlers.py:23\n Begin attempting to scrape: GLG handlers.py:27\n[08:44:14] Deleting existing data... base.py:257\n Getting all files in Councillors... base.py:209\n[08:44:15] ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n ...data deleted. base.py:264\n Scraping from base.py:49\n https://www.glasgow.gov.uk/councillorsandcommittees/allMem \n bers.asp?sort=0&page=0&rec=100 \n Client error '404 Not Found' for url handlers.py:36\n 'https://www.glasgow.gov.uk/councillorsandcommittees/a \n llMembers.asp?sort=0&page=0&rec=100' \n For more information check: \n https://developer.mozilla.org/en-US/docs/Web/HTTP/Stat \n us/404 \n[08:44:16] Finished attempting to scrape: GLG base.py:345\n","errors":"Traceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 55, in run\n for councillor_html in self.get_councillors():\n File \"/var/task/lgsf/councillors/scrapers.py\", line 161, in get_councillors\n container = self.get_list_container()\n File \"/var/task/lgsf/councillors/scrapers.py\", line 152, in get_list_container\n self.base_url_soup = self.get_page(self.base_url)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 141, in get_page\n page = self.get(url, extra_headers=self.extra_headers).text\n File \"/var/task/lgsf/scrapers/base.py\", line 56, in get\n response.raise_for_status()\n File \"/opt/python/httpx/_models.py\", line 761, in raise_for_status\n raise HTTPStatusError(message, request=request, response=self)\nhttpx.HTTPStatusError: Client error '404 Not Found' for url 'https://www.glasgow.gov.uk/councillorsandcommittees/allMembers.asp?sort=0&page=0&rec=100'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404\n","start":"2024-10-22 08:44:12.440877","end":"2024-10-22 08:44:16.166719","duration":3}},{"council_id":"GLS","missing":false,"latest_run":{"status_code":1,"log_text":"[08:43:39] Fetching Scraper for: GLS handlers.py:23\n Begin attempting to scrape: GLS handlers.py:27\n[08:43:40] Deleting existing data... base.py:257\n Getting all files in Councillors... base.py:209\n ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n[08:43:41] ...data deleted. base.py:264\n Scraping from base.py:49\n http://glostext.gloucestershire.gov.uk//mgWebService.asmx/ \n GetCouncillorsByWard \n[08:43:56] [Errno 110] Connection timed out handlers.py:36\n[08:43:57] Finished attempting to scrape: GLS base.py:345\n","errors":"Traceback (most recent call last):\n File \"/opt/python/httpx/_transports/default.py\", line 69, in map_httpcore_exceptions\n yield\n File \"/opt/python/httpx/_transports/default.py\", line 233, in handle_request\n resp = self._pool.handle_request(req)\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 216, in handle_request\n raise exc from None\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 196, in handle_request\n response = connection.handle_request(\n File \"/opt/python/httpcore/_sync/connection.py\", line 99, in handle_request\n raise exc\n File \"/opt/python/httpcore/_sync/connection.py\", line 76, in handle_request\n stream = self._connect(request)\n File \"/opt/python/httpcore/_sync/connection.py\", line 122, in _connect\n stream = self._network_backend.connect_tcp(**kwargs)\n File \"/opt/python/httpcore/_backends/sync.py\", line 205, in connect_tcp\n with map_exceptions(exc_map):\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpcore/_exceptions.py\", line 14, in map_exceptions\n raise to_exc(exc) from exc\nhttpcore.ConnectTimeout: [Errno 110] Connection timed out\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 197, in run\n wards = self.get_councillors()\n File \"/var/task/lgsf/councillors/scrapers.py\", line 216, in get_councillors\n req = self.get(self.format_councillor_api_url())\n File \"/var/task/lgsf/scrapers/base.py\", line 55, in get\n response = self.http_client.get(url, headers=headers, timeout=30)\n File \"/opt/python/httpx/_client.py\", line 1054, in get\n return self.request(\n File \"/opt/python/httpx/_client.py\", line 827, in request\n return self.send(request, auth=auth, follow_redirects=follow_redirects)\n File \"/opt/python/httpx/_client.py\", line 914, in send\n response = self._send_handling_auth(\n File \"/opt/python/httpx/_client.py\", line 942, in _send_handling_auth\n response = self._send_handling_redirects(\n File \"/opt/python/httpx/_client.py\", line 979, in _send_handling_redirects\n response = self._send_single_request(request)\n File \"/opt/python/httpx/_client.py\", line 1015, in _send_single_request\n response = transport.handle_request(request)\n File \"/opt/python/httpx/_transports/default.py\", line 232, in handle_request\n with map_httpcore_exceptions():\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpx/_transports/default.py\", line 86, in map_httpcore_exceptions\n raise mapped_exc(message) from exc\nhttpx.ConnectTimeout: [Errno 110] Connection timed out\n","start":"2024-10-22 08:43:39.680650","end":"2024-10-22 08:43:57.270195","duration":17}},{"council_id":"GRE","missing":false,"latest_run":{"status_code":1,"log_text":"[08:26:12] Fetching Scraper for: GRE handlers.py:23\n Begin attempting to scrape: GRE handlers.py:27\n[08:26:13] Deleting existing data... base.py:257\n Getting all files in Councillors... base.py:209\n ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n[08:26:14] ...data deleted. base.py:264\n Scraping from base.py:49\n https://committees.royalgreenwich.gov.uk/Councillors/tabid \n /63/ScreenMode/Alphabetical/Default.aspx \n[08:26:15] Client error '404 Not Found' for url handlers.py:36\n 'https://committees.royalgreenwich.gov.uk/mgError.aspx \n ' \n For more information check: \n https://developer.mozilla.org/en-US/docs/Web/HTTP/Stat \n us/404 \n Finished attempting to scrape: GRE base.py:345\n","errors":"Traceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 55, in run\n for councillor_html in self.get_councillors():\n File \"/var/task/lgsf/councillors/scrapers.py\", line 272, in get_councillors\n req = self.get(\n File \"/var/task/lgsf/scrapers/base.py\", line 56, in get\n response.raise_for_status()\n File \"/opt/python/httpx/_models.py\", line 761, in raise_for_status\n raise HTTPStatusError(message, request=request, response=self)\nhttpx.HTTPStatusError: Client error '404 Not Found' for url 'https://committees.royalgreenwich.gov.uk/mgError.aspx'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404\n","start":"2024-10-22 08:26:12.738761","end":"2024-10-22 08:26:15.343415","duration":2}},{"council_id":"NTL","missing":false,"latest_run":{"status_code":1,"log_text":"[09:21:28] Fetching Scraper for: NTL handlers.py:23\n Begin attempting to scrape: NTL handlers.py:27\n[09:21:29] Deleting existing data... base.py:257\n Getting all files in Councillors... base.py:209\n Getting all files in Councillors/json... base.py:209\n ...found 59 files in Councillors/json base.py:225\n Getting all files in Councillors/raw... base.py:209\n[09:21:30] ...found 59 files in Councillors/raw base.py:225\n ...found 119 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 100 files base.py:236\n[09:21:31] Deleting batch no. 2 consisting of 19 files base.py:236\n ...data deleted. base.py:264\n Scraping from base.py:49\n https://democracy.npt.gov.uk/mgWebService.asmx/GetCouncill \n orsByWard \n[09:21:47] [Errno 110] Connection timed out handlers.py:36\n Finished attempting to scrape: NTL base.py:345\n","errors":"Traceback (most recent call last):\n File \"/opt/python/httpx/_transports/default.py\", line 69, in map_httpcore_exceptions\n yield\n File \"/opt/python/httpx/_transports/default.py\", line 233, in handle_request\n resp = self._pool.handle_request(req)\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 216, in handle_request\n raise exc from None\n File \"/opt/python/httpcore/_sync/connection_pool.py\", line 196, in handle_request\n response = connection.handle_request(\n File \"/opt/python/httpcore/_sync/connection.py\", line 99, in handle_request\n raise exc\n File \"/opt/python/httpcore/_sync/connection.py\", line 76, in handle_request\n stream = self._connect(request)\n File \"/opt/python/httpcore/_sync/connection.py\", line 122, in _connect\n stream = self._network_backend.connect_tcp(**kwargs)\n File \"/opt/python/httpcore/_backends/sync.py\", line 205, in connect_tcp\n with map_exceptions(exc_map):\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpcore/_exceptions.py\", line 14, in map_exceptions\n raise to_exc(exc) from exc\nhttpcore.ConnectTimeout: [Errno 110] Connection timed out\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 197, in run\n wards = self.get_councillors()\n File \"/var/task/lgsf/councillors/scrapers.py\", line 216, in get_councillors\n req = self.get(self.format_councillor_api_url())\n File \"/var/task/lgsf/scrapers/base.py\", line 55, in get\n response = self.http_client.get(url, headers=headers, timeout=30)\n File \"/opt/python/httpx/_client.py\", line 1054, in get\n return self.request(\n File \"/opt/python/httpx/_client.py\", line 827, in request\n return self.send(request, auth=auth, follow_redirects=follow_redirects)\n File \"/opt/python/httpx/_client.py\", line 914, in send\n response = self._send_handling_auth(\n File \"/opt/python/httpx/_client.py\", line 942, in _send_handling_auth\n response = self._send_handling_redirects(\n File \"/opt/python/httpx/_client.py\", line 979, in _send_handling_redirects\n response = self._send_single_request(request)\n File \"/opt/python/httpx/_client.py\", line 1015, in _send_single_request\n response = transport.handle_request(request)\n File \"/opt/python/httpx/_transports/default.py\", line 232, in handle_request\n with map_httpcore_exceptions():\n File \"/var/lang/lib/python3.10/contextlib.py\", line 153, in __exit__\n self.gen.throw(typ, value, traceback)\n File \"/opt/python/httpx/_transports/default.py\", line 86, in map_httpcore_exceptions\n raise mapped_exc(message) from exc\nhttpx.ConnectTimeout: [Errno 110] Connection timed out\n","start":"2024-10-22 09:21:28.734939","end":"2024-10-22 09:21:47.664245","duration":18}},{"council_id":"SHE","missing":false,"latest_run":{"status_code":null,"log_text":"[11:28:20] Fetching Scraper for: SHE handlers.py:22\n Begin attempting to scrape: SHE handlers.py:25\n Deleting existing data... base.py:234\n Getting all files in SHE... base.py:186\n[11:28:21] Getting all files in SHE/json... base.py:186\n ...found 30 files in SHE/json base.py:202\n Getting all files in SHE/raw... base.py:186\n ...found 30 files in SHE/raw base.py:202\n ...found 61 files in SHE base.py:202\n Deleting batch no. 1 consisting of 61 files base.py:211\n[11:28:32] An error occurred (ThrottlingException) when calling handlers.py:34\n the CreateCommit operation (reached max retries: 4): \n Rate exceeded \n Finished attempting to scrape: SHE base.py:319\n","errors":"An error occurred (ThrottlingException) when calling the CreateCommit operation (reached max retries: 4): Rate exceeded","start":"2022-04-04 11:28:20.509898","end":"2022-04-04 11:28:32.871624","duration":12}},{"council_id":"STG","missing":false,"latest_run":{"status_code":1,"log_text":"[09:59:51] Fetching Scraper for: STG handlers.py:23\n Begin attempting to scrape: STG handlers.py:27\n Deleting existing data... base.py:257\n[09:59:52] Getting all files in Councillors... base.py:209\n Getting all files in Councillors/json... base.py:209\n ...found 19 files in Councillors/json base.py:225\n Getting all files in Councillors/raw... base.py:209\n ...found 19 files in Councillors/raw base.py:225\n ...found 39 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 39 files base.py:236\n[09:59:53] ...data deleted. base.py:264\n Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/politic \n ians-and-elections/councillors/ \n[09:59:54] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/elaine-watterson/ \n[09:59:56] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/gene-maxwell/ \n[09:59:57] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/martin-earl/ \n[09:59:58] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/gerry-mcgarvey/ \n[10:00:01] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/paul-henke/ \n[10:00:02] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/rosemary-fraser/ \n[10:00:03] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/alasdair-tollemache/ \n[10:00:05] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/david-wilson/ \n[10:00:06] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/robin-kleinman/ \n[10:00:07] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/thomas-heald/ \n[10:00:08] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/danny-gibson/ \n[10:00:10] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/jim-thomson/ \n[10:00:11] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/rachel-nunn/ \n[10:00:12] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/susan-mcgill/ \n[10:00:13] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/jen-preston/ \n[10:00:15] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/neil-benny/ \n[10:00:16] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/scott-farmer/ \n[10:00:17] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/bryan-flannagan/ \n[10:00:18] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/gerry-mclaughlan/ \n[10:00:20] Scraping from base.py:49\n https://www.stirling.gov.uk/council-and-committees/council \n lors/your-councillors/vacant/ \n[10:00:21] 'NoneType' object is not subscriptable handlers.py:36\n Committing batch 1 consisting of 38 files base.py:297\n[10:00:22] Finished attempting to scrape: STG base.py:345\n","errors":"Traceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 57, in run\n councillor = self.get_single_councillor(councillor_html)\n File \"scrapers/STG-stirling/councillors.py\", line 42, in get_single_councillor\n councillor.email = soup.select_one(\"a[href^=mailto]\")[\nTypeError: 'NoneType' object is not subscriptable\n","start":"2024-10-22 09:59:51.381131","end":"2024-10-22 10:00:22.597720","duration":31}},{"council_id":"TEW","missing":false,"latest_run":{"status_code":1,"log_text":"[09:49:12] Fetching Scraper for: TEW handlers.py:23\n Begin attempting to scrape: TEW handlers.py:27\n Deleting existing data... base.py:257\n[09:49:13] Getting all files in Councillors... base.py:209\n ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n[09:49:14] ...data deleted. base.py:264\n Scraping from base.py:49\n http://minutes.tewkesbury.gov.uk/mgWebService.asmx/GetCoun \n cillorsByWard \n Client error '403 Forbidden' for url handlers.py:36\n 'http://minutes.tewkesbury.gov.uk/mgWebService.asmx/Ge \n tCouncillorsByWard' \n For more information check: \n https://developer.mozilla.org/en-US/docs/Web/HTTP/Stat \n us/403 \n Finished attempting to scrape: TEW base.py:345\n","errors":"Traceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 197, in run\n wards = self.get_councillors()\n File \"/var/task/lgsf/councillors/scrapers.py\", line 216, in get_councillors\n req = self.get(self.format_councillor_api_url())\n File \"/var/task/lgsf/scrapers/base.py\", line 56, in get\n response.raise_for_status()\n File \"/opt/python/httpx/_models.py\", line 761, in raise_for_status\n raise HTTPStatusError(message, request=request, response=self)\nhttpx.HTTPStatusError: Client error '403 Forbidden' for url 'http://minutes.tewkesbury.gov.uk/mgWebService.asmx/GetCouncillorsByWard'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/403\n","start":"2024-10-22 09:49:12.403815","end":"2024-10-22 09:49:14.616149","duration":2}},{"council_id":"THE","missing":false,"latest_run":{"status_code":1,"log_text":"[10:41:03] Fetching Scraper for: THE handlers.py:23\n Begin attempting to scrape: THE handlers.py:27\n Deleting existing data... base.py:257\n[10:41:04] Getting all files in Councillors... base.py:209\n ...found 1 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 1 files base.py:236\n[10:41:05] ...data deleted. base.py:264\n Scraping from base.py:49\n https://www.threerivers.gov.uk/listing/councillors \n[10:41:07] 'NoneType' object has no attribute 'findNext' handlers.py:36\n Finished attempting to scrape: THE base.py:345\n","errors":"Traceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 55, in run\n for councillor_html in self.get_councillors():\n File \"/var/task/lgsf/councillors/scrapers.py\", line 161, in get_councillors\n container = self.get_list_container()\n File \"scrapers/THE-three-rivers/councillors.py\", line 15, in get_list_container\n return soup.find(\"h3\", text=\"District Councillor\").findNext(\"ul\")\nAttributeError: 'NoneType' object has no attribute 'findNext'\n","start":"2024-10-22 10:41:03.506094","end":"2024-10-22 10:41:07.293736","duration":3}},{"council_id":"VGL","missing":false,"latest_run":{"status_code":1,"log_text":"[09:34:58] Fetching Scraper for: VGL handlers.py:23\n Begin attempting to scrape: VGL handlers.py:27\n[09:34:59] Deleting existing data... base.py:257\n Getting all files in Councillors... base.py:209\n Getting all files in Councillors/json... base.py:209\n[09:35:00] ...found 16 files in Councillors/json base.py:225\n Getting all files in Councillors/raw... base.py:209\n ...found 16 files in Councillors/raw base.py:225\n ...found 33 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 33 files base.py:236\n[09:35:01] ...data deleted. base.py:264\n Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Councillors.aspx \n[09:35:04] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Asbrey-Anne.aspx \n[09:35:06] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Aviet-Julie.aspx \n[09:35:07] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Ball-Gareth.aspx \n[09:35:09] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Birch-Rhiannon.aspx \n[09:35:10] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Brooks-Bronwen.aspx \n[09:35:12] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Bruce-Gillian.aspx \n[09:35:13] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Buckley-Ian.aspx \n[09:35:15] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Burnett-Lis.aspx \n[09:35:17] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Campbell-Samantha.aspx \n[09:35:18] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Carroll-George.aspx \n[09:35:20] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Cave-Christine.aspx \n[09:35:22] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Champion-Charles.aspx \n[09:35:23] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Charles-Janice.aspx \n[09:35:25] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Collins-Amelia.aspx \n[09:35:26] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Cowpe-Marianne.aspx \n[09:35:28] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Drake-Pamela.aspx \n[09:35:29] Scraping from base.py:49\n https://www.valeofglamorgan.gov.uk/en/our_council/Council- \n Structure/councillors/Driscoll-Vincent.aspx \n[09:35:31] 'NoneType' object has no attribute 'get_text' handlers.py:36\n Committing batch 1 consisting of 32 files base.py:297\n[09:35:32] Finished attempting to scrape: VGL base.py:345\n","errors":"Traceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 57, in run\n councillor = self.get_single_councillor(councillor_html)\n File \"scrapers/VGL-the-vale-of-glamorgan/councillors.py\", line 36, in get_single_councillor\n email_text = soup.select_one(\"#S4_EmailPlaceholder\").get_text(\nAttributeError: 'NoneType' object has no attribute 'get_text'\n","start":"2024-10-22 09:34:58.857532","end":"2024-10-22 09:35:32.930059","duration":34}},{"council_id":"WLN","missing":false,"latest_run":{"status_code":1,"log_text":"[08:55:48] Fetching Scraper for: WLN handlers.py:23\n Begin attempting to scrape: WLN handlers.py:27\n Deleting existing data... base.py:257\n[08:55:49] Getting all files in Councillors... base.py:209\n Getting all files in Councillors/json... base.py:209\n ...found 25 files in Councillors/json base.py:225\n Getting all files in Councillors/raw... base.py:209\n ...found 25 files in Councillors/raw base.py:225\n ...found 51 files in Councillors base.py:225\n Deleting batch no. 1 consisting of 51 files base.py:236\n[08:55:50] ...data deleted. base.py:264\n Scraping from https://westlothian.gov.uk/councillors base.py:49\n[08:55:52] Scraping from base.py:49\n https://westlothian.gov.uk/article/33888/Linlithgow \n[08:55:53] Scraping from base.py:49\n https://westlothian.gov.uk/article/33889/Broxburn-Uphall-a \n nd-Winchburgh \n[08:55:54] Scraping from base.py:49\n https://westlothian.gov.uk/article/33890/Livingston-North \n[08:55:55] Scraping from base.py:49\n https://westlothian.gov.uk/article/33891/Livingston-South \n[08:55:56] Scraping from base.py:49\n https://westlothian.gov.uk/article/33893/East-Livingston-a \n nd-East-Calder \n[08:55:57] Scraping from base.py:49\n https://westlothian.gov.uk/article/33892/Fauldhouse-and-th \n e-Breich-Valley \n Scraping from base.py:49\n https://westlothian.gov.uk/article/33894/Whitburn-and-Blac \n kburn \n[08:55:58] Scraping from base.py:49\n https://westlothian.gov.uk/article/33895/Bathgate \n[08:55:59] Scraping from base.py:49\n https://westlothian.gov.uk/article/33896/Armadale-and-Blac \n kridge \n[08:56:00] Scraping from base.py:49\n https://westlothian.gov.uk/article/33897/Councillor-Tom-Co \n nn \n[08:56:01] Scraping from base.py:49\n https://westlothian.gov.uk/article/33898/Councillor-Paulin \n e-Orr \n[08:56:02] Scraping from base.py:49\n https://westlothian.gov.uk/article/33899/Councillor-Sally- \n Pattle \n[08:56:03] Scraping from base.py:49\n https://westlothian.gov.uk/article/34305/Councillor-Tony-B \n oyle \n[08:56:04] Scraping from base.py:49\n https://westlothian.gov.uk/article/34302/Councillor-Diane- \n Calder \n[08:56:05] Scraping from base.py:49\n https://westlothian.gov.uk/article/34303/Councillor-Janet- \n Campbell \n[08:56:06] Scraping from base.py:49\n https://westlothian.gov.uk/article/34304/Councillor-Angela \n -Doran-Timson \n[08:56:07] Scraping from base.py:49\n https://westlothian.gov.uk/article/34307/Councillor-Alison \n -Adamson \n[08:56:08] Scraping from base.py:49\n https://westlothian.gov.uk/article/34306/Councillor-Robert \n -De-Bold \n[08:56:09] Scraping from base.py:49\n https://westlothian.gov.uk/article/34308/Councillor-Anne-M \n cMillan \n[08:56:10] Scraping from base.py:49\n https://westlothian.gov.uk/article/34309/Councillor-Andrew \n -Miller \n[08:56:12] Scraping from base.py:49\n https://westlothian.gov.uk/article/34311/Councillor-Lawren \n ce-Fitzpatrick \n[08:56:13] Scraping from base.py:49\n https://westlothian.gov.uk/article/34310/Councillor-Peter- \n Heggie \n[08:56:14] Scraping from base.py:49\n https://westlothian.gov.uk/article/34312/Councillor-Maria- \n MacAulay \n[08:56:15] Scraping from base.py:49\n https://westlothian.gov.uk/article/34313/Councillor-Moira- \n McKee-Shemilt \n[08:56:16] Scraping from base.py:49\n https://westlothian.gov.uk/article/34317/Councillor-Damian \n -Doran-Timson \n[08:56:17] Scraping from base.py:49\n https://westlothian.gov.uk/article/34315/Councillor-Carl-J \n ohn \n[08:56:18] Scraping from base.py:49\n https://westlothian.gov.uk/article/34316/Councillor-Danny- \n Logue \n[08:56:19] Scraping from base.py:49\n https://westlothian.gov.uk/article/34314/Councillor-Veroni \n ca-Smith \n[08:56:20] Scraping from base.py:49\n https://westlothian.gov.uk/article/34318/Councillor-Paulin \n e-Clark \n[08:56:22] Scraping from base.py:49\n https://westlothian.gov.uk/article/34319/Councillor-Craig- \n Meek \n[08:56:23] Scraping from base.py:49\n https://westlothian.gov.uk/article/34320/Councillor-Cathy- \n Muldoon \n Scraping from base.py:49\n https://westlothian.gov.uk/article/34321/Councillor-Jim-Di \n ckson \n[08:56:24] Scraping from base.py:49\n https://westlothian.gov.uk/article/34322/Councillor-Mary-D \n ickson \n[08:56:26] Scraping from base.py:49\n https://westlothian.gov.uk/article/34323/Councillor-George \n -Paul \n[08:56:28] Scraping from base.py:49\n https://westlothian.gov.uk/article/34324/Councillor-Vacant \n[08:56:29] list index out of range handlers.py:36\n Committing batch 1 consisting of 50 files base.py:297\n[08:56:30] Finished attempting to scrape: WLN base.py:345\n","errors":"Traceback (most recent call last):\n File \"/var/task/lgsf/aws_lambda/handlers.py\", line 32, in scraper_worker_handler\n scraper.run(run_log)\n File \"/var/task/lgsf/councillors/scrapers.py\", line 57, in run\n councillor = self.get_single_councillor(councillor_html)\n File \"scrapers/WLN-west-lothian/councillors.py\", line 37, in get_single_councillor\n councillor.email = soup.select(\"a[href^=mailto]\")[0].get_text(\nIndexError: list index out of range\n","start":"2024-10-22 08:55:48.388528","end":"2024-10-22 08:56:30.904444","duration":42}}] diff --git a/index.html b/index.html index e5b9270fd1..c80d78ceaf 100644 --- a/index.html +++ b/index.html @@ -49,10 +49,6 @@
[08:20:59] Fetching Scraper for: ABC handlers.py:23 + Begin attempting to scrape: ABC handlers.py:27 + Deleting existing data... base.py:257 + Getting all files in Councillors... base.py:209 +[08:21:00] Getting all files in Councillors/json... base.py:209 + ...found 16 files in Councillors/json base.py:225 + Getting all files in Councillors/raw... base.py:209 + ...found 16 files in Councillors/raw base.py:225 + ...found 33 files in Councillors base.py:225 + Deleting batch no. 1 consisting of 33 files base.py:236 +[08:21:01] ...data deleted. base.py:264 + Scraping from base.py:49 + https://www.armaghbanbridgecraigavon.gov.uk/councillors/ +[08:21:05] Committing batch 1 consisting of 32 files base.py:297 +[08:21:06] Finished attempting to scrape: ABC base.py:345 ++ + + + +
[10:15:28] Fetching Scraper for: ABC handlers.py:23 - Begin attempting to scrape: ABC handlers.py:27 -[10:15:29] Deleting existing data... base.py:257 - Getting all files in Councillors... base.py:209 - Getting all files in Councillors/json... base.py:209 -[10:15:30] ...found 16 files in Councillors/json base.py:225 - Getting all files in Councillors/raw... base.py:209 - ...found 16 files in Councillors/raw base.py:225 - ...found 33 files in Councillors base.py:225 - Deleting batch no. 1 consisting of 33 files base.py:236 -[10:15:31] ...data deleted. base.py:264 - Scraping from base.py:49 - https://www.armaghbanbridgecraigavon.gov.uk/councillors/ -[10:15:34] Committing batch 1 consisting of 32 files base.py:297 -[10:15:35] Finished attempting to scrape: ABC base.py:345 -- -