def run_search(self, startDate, track, endDate, writeDir):
        '''
        Main searching method. This will set off a scrape that will end with 
        the report being written.
        '''
        #List for the race objects
        meetingResults = []

        #Set up a racedate datetime object for comparing dates
        startDateObj = self.build_date_obj(startDate)
        if endDate == "1":
            endDateObj = startDateObj
            endDateObj += datetime.timedelta(days=1)
        else:
            endDateObj = self.build_date_obj(endDate)
            
        dates = self.get_dates(startDateObj, endDateObj)

        #Get urls to query
        queryUrls = self.get_query_urls(dates, track)

        #print queryUrls
        for t, urls in queryUrls.iteritems():
            for u in urls:
                
                content = self.get_page_content(u)

                if content is None:
                    continue
                
                trackNameEls, goingAllowances, forecasts, tricasts = \
                    self.get_track_info_elements(content, t)
                
                #We can assume that our track name matches.
                #Scrape the race and date
                for name, allowance, fcast, tcast in zip(
                        trackNameEls, goingAllowances, forecasts, tricasts):
                    raceDate, race, grade, distance, goingAllowance, \
                        forecast,tricast, dogs = self.get_race_info(name, 
                            allowance, fcast, tcast)
                    
                    raceResult = Race(t, raceDate, race, grade, distance, 
                                      goingAllowance, forecast, tricast, dogs)
                    meetingResults.append(raceResult)
                    
                generator = ReportGenerator(os.getcwd(), writeDir)
                generator.generate_report(meetingResults)
                meetingResults = []
                
                if len(urls) > 1:
                    #Don't get too greedy
                    print("Going to sleep for 5 seconds")
                    sleep(5)