This commit is contained in:
dt215git
2023-03-19 20:01:39 +00:00
parent 997e39ce28
commit 3a80852c92

View File

@@ -15,7 +15,7 @@ URL = "https://wigan.gov.uk"
TEST_CASES = { TEST_CASES = {
"Test_001": {"postcode": "WN5 9BH", "uprn": "100011821616"}, "Test_001": {"postcode": "WN5 9BH", "uprn": "100011821616"},
"Test_002": {"postcode": "WN6 8RG", "uprn": "100011776568"}, "Test_002": {"postcode": "WN6 8RG", "uprn": "100011776859"},
"Test_003": {"postcode": "wn36au", "uprn": 100011749007}, "Test_003": {"postcode": "wn36au", "uprn": 100011749007},
} }
@@ -29,10 +29,9 @@ ICON_MAP = {
REGEX_ORDINALS = r"(st|nd|rd|th)" REGEX_ORDINALS = r"(st|nd|rd|th)"
class Source: class Source:
def __init__(self, postcode, uprn): def __init__(self, postcode, uprn):
self._postcode = str(postcode.upper().strip()) self._postcode = str(postcode.upper())
self._uprn = str(uprn).zfill(12) self._uprn = str(uprn).zfill(12)
def get_asp_var(self, broth, id) -> str: def get_asp_var(self, broth, id) -> str:
@@ -40,16 +39,17 @@ class Source:
return asp_var return asp_var
def fetch(self): def fetch(self):
# Initial a session to generate required ASP variables
# Initiate a session to generate required ASP variables
s= requests.Session() s= requests.Session()
r0 = s.get("https://apps.wigan.gov.uk/MyNeighbourhood/") r0 = s.get("https://apps.wigan.gov.uk/MyNeighbourhood/")
soup = BeautifulSoup(r0.text, "html.parser") soup = BeautifulSoup(r0.text, "html.parser")
# Build initial search payload # Build initial search payload
payload = { payload = {
"__VIEWSTATE": get_asp_var(soup, "__VIEWSTATE"), "__VIEWSTATE": self.get_asp_var(soup, "__VIEWSTATE"),
"__VIEWSTATEGENERATOR": get_asp_var(soup, "__VIEWSTATEGENERATOR"), "__VIEWSTATEGENERATOR": self.get_asp_var(soup, "__VIEWSTATEGENERATOR"),
"__EVENTVALIDATION": get_asp_var(soup, "__EVENTVALIDATION"), "__EVENTVALIDATION": self.get_asp_var(soup, "__EVENTVALIDATION"),
"ctl00$ContentPlaceHolder1$txtPostcode": self._postcode, "ctl00$ContentPlaceHolder1$txtPostcode": self._postcode,
"ctl00$ContentPlaceHolder1$btnPostcodeSearch": "Search", "ctl00$ContentPlaceHolder1$btnPostcodeSearch": "Search",
} }
@@ -63,9 +63,9 @@ class Source:
"__EVENTTARGET": "ctl00$ContentPlaceHolder1$lstAddresses", "__EVENTTARGET": "ctl00$ContentPlaceHolder1$lstAddresses",
"__EVENTARGUMENT": "", "__EVENTARGUMENT": "",
"__LASTFOCUS": "", "__LASTFOCUS": "",
"__VIEWSTATE": get_asp_var(soup, "__VIEWSTATE"), "__VIEWSTATE": self.get_asp_var(soup, "__VIEWSTATE"),
"__VIEWSTATEGENERATOR": get_asp_var(soup, "__VIEWSTATEGENERATOR"), "__VIEWSTATEGENERATOR": self.get_asp_var(soup, "__VIEWSTATEGENERATOR"),
"__EVENTVALIDATION": get_asp_var(soup, "__EVENTVALIDATION"), "__EVENTVALIDATION": self.get_asp_var(soup, "__EVENTVALIDATION"),
"ctl00$ContentPlaceHolder1$txtPostcode": self._postcode, "ctl00$ContentPlaceHolder1$txtPostcode": self._postcode,
"ctl00$ContentPlaceHolder1$lstAddresses": "UPRN" + self._uprn, "ctl00$ContentPlaceHolder1$lstAddresses": "UPRN" + self._uprn,
} }
@@ -76,7 +76,6 @@ class Source:
# Extract the collection schedules # Extract the collection schedules
bin_collections = soup.findAll("div", {"class": "BinsRecycling"}) bin_collections = soup.findAll("div", {"class": "BinsRecycling"})
entries = [] entries = []
for bin in bin_collections: for bin in bin_collections:
waste_type = bin.find("h2").text waste_type = bin.find("h2").text