|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
-
- import urllib2
- import urllib
- import urlparse
-
- import datetime
- import cgi
- import re
-
- comment_re = re.compile("Submit Comment")
- mapref_re = re.compile("Map Ref")
-
- import BeautifulSoup
-
- from PlanningUtils import PlanningApplication, \
- PlanningAuthorityResults, \
- getPostcodeFromText
-
- class AberdeenshireParser:
- def __init__(self, *args):
-
- self.authority_name = "Aberdeenshire Council"
- self.authority_short_name = "Aberdeenshire"
- self.base_url = "http://www.aberdeenshire.gov.uk/planning/apps/search.asp?startDateSearch=%(day)s%%2F%(month)s%%2F%(year)s&endDateSearch=%(day)s%%2F%(month)s%%2F%(year)s&Submit=Search"
-
- self._results = PlanningAuthorityResults(self.authority_name, self.authority_short_name)
-
-
- def getResultsByDayMonthYear(self, day, month, year):
- search_day = datetime.date(year, month, day)
-
- next = self.base_url %{"day": day,
- "month": month,
- "year": year,
- }
-
- while next:
-
- # Now get the search page
- response = urllib2.urlopen(next)
-
- soup = BeautifulSoup.BeautifulSoup(response.read())
-
- trs = soup.table.findAll("tr")[1:] # First one is just headers
-
- for tr in trs:
- application = PlanningApplication()
-
- application.date_received = search_day
- application.council_reference = tr.a.string
- application.info_url = urlparse.urljoin(self.base_url, tr.a['href'])
- tds = tr.findAll("td")
-
- application.address = ' '.join([x.replace(" ", " ").strip() for x in tds[2].contents if type(x) == BeautifulSoup.NavigableString and x.strip()])
- application.postcode = getPostcodeFromText(application.address)
- application.description = tds[4].string.replace(" ", " ").strip()
-
- # Get the info page in order to find the comment url
- # we could do this without a download if it wasn't for the
- # sector parameter - I wonder what that is?
- info_response = urllib2.urlopen(application.info_url)
- info_soup = BeautifulSoup.BeautifulSoup(info_response.read())
-
- comment_navstring = info_soup.find(text=comment_re)
-
- if comment_navstring:
- application.comment_url = urlparse.urljoin(self.base_url, info_soup.find(text=comment_re).parent['href'])
- else:
- application.comment_url = "No Comments"
-
- # While we're at it, let's get the OSGB
- application.osgb_x, application.osgb_y = [x.strip() for x in info_soup.find(text=mapref_re).findNext("a").string.strip().split(",")]
-
- self._results.addApplication(application)
-
- next_element = soup.find(text="next").parent
-
- if next_element.name == 'a':
- next = urlparse.urljoin(self.base_url, next_element['href'])
- else:
- next = None
-
- return self._results
-
- def getResults(self, day, month, year):
- return self.getResultsByDayMonthYear(int(day), int(month), int(year)).displayXML()
-
- if __name__ == '__main__':
- parser = AberdeenshireParser()
- print parser.getResults(7,8,2008)
-
|