Exemple #1
0
    def __VenueParser(self, element, listData, scrape_page):
        try:
            classLI = element.get('class')
            featured = 'none'
            if classLI.find('TOP') != -1:
                featured = 'featured'
            ven = Venue()
            ven.name = element.find('./a').text.replace(''', '')
            ven.country = self._language
            ven.hqdb_featured_ad_type = featured
            ven.scrape_page = scrape_page

            div = element.find('./div')
            if div.find('./font') != None:
                font = div.xpath('./font')
                #div.remove(font)
                for font_ in font:
                    div.remove(font_)

            a = div.find('./a')
            if a != None:
                ven.business_website = self.check_website(a.get('href'))
                div.remove(a)
            content = '|'.join(div.itertext())
            content_ = content.split('|')
            phone = ''
            postion = -1
            if content_[postion].find('Telefoon:') != -1:
                phone = content_[postion].replace('Telefoon:', '').replace(
                    ' ', '').replace('-', '').replace('PR', '')

                if phone.startswith('00'):
                    phone = '+' + phone[2:len(phone)]
                if phone.startswith('31'):
                    phone = '+' + phone
                if phone.startswith('+'):
                    if phone.startswith('+31'):
                        ''
                    else:
                        phone = None

                if phone != None:

                    if phone.startswith('06') or phone.startswith('+316'):
                        ven.mobile_number = self.validatePhone__(phone)
                    else:
                        ven.office_number = self.validatePhone__(phone)
                postion -= 1
            city_zipcode = content_[postion]
            street = ' '.join(content_[0:postion])
            (ven.zipcode, ven.city) = self.__processAddress(city_zipcode)
            ven.street = street
            (ven.latitude,
             ven.longitude) = self.processlatlng(listData, city_zipcode)

            index = self.index + 1
            self.index = index
            ven.writeToFile(self.folder, index, ven.name, False)
        except Exception, ex:
            print ex
    def __VenueParser(self, url, cateName):
        existing = [x for x in self.listlink if url in x]
        self.listlink.append(url)
        if len(existing) > 0:
            self.countduplicate += 1
            print '[INFO] Duplicate count = ' + str(self.countduplicate)
            return
        try:
            print 'Scraping url: ' + url

            #url = 'http://www.uksecurity-directory.co.uk/the-directory/1905/ecpcco/'

            xmlDoc = Util.getRequestsXML(url,
                                         '//div[@class="gdl-page-content"]')
            xmlDoc = xmlDoc.xpath('//div[@class="gdl-page-content"]/div')[0]
            ven = Venue()

            imgs = []

            ven.category = cateName
            ven.scrape_page = url
            ven.country = self._language
            ven.name = xmlDoc.find('./div/h2').text
            ven.hqdb_featured_ad_type = 'none'
            isFeatured = xmlDoc.find('./div[@class="stickytag"]/img')
            if isFeatured != None:
                if isFeatured.get('title') == 'Featured Listing':
                    ven.hqdb_featured_ad_type = 'featured'
            divInfo = xmlDoc.xpath('./div[@class="listing-details cf"]/div')
            town_ = ''
            area_ = ''
            zipcode = ''
            listPhone_ = []
            for div__ in divInfo:
                label = div__.find('./label')
                if label != None:
                    label_ = label.text
                    if label_ == 'Business Website Address:':
                        website = div__.find('./span/a')
                        if website != None:
                            website = website.get('href')
                            isFacebook = website.find('facebook.com')
                            isTwiter = website.find('twiter.com')
                            if isFacebook == -1 and isTwiter == -1:
                                ven.business_website = website
                            else:
                                if isFacebook != -1:
                                    ven.facebook = website
                                if ven.twitter != -1:
                                    ven.twitter = website
                    if label_ == 'Security Services:':
                        serviceStr = div__.xpath('./span/a')
                        sers = []
                        for ser in serviceStr:
                            serv = Service()
                            serv.service = ser.text
                            sers.append(serv)
                        if len(sers) > 0:
                            ven.services = sers
                            ven.pricelist_link = [ven.scrape_page]
                    if label_ == 'Long Business Description:':
                        des = div__.find('./span')
                        if des != None:
                            des = ' '.join(des.itertext())
                            ven.description = des
                    if label_ == 'Business Phone Number:':
                        phone = div__.find('./span').text
                        #phone = self.formatPhone(phone)
                        findsplistPPhone = self.findSplitPhone(phone)
                        if findsplistPPhone == None:
                            listPhone_ = [phone]
                        #(ven.office_number,ven.office_number2,ven.mobile_number,ven.mobile_number2) = self.processPhones([phone])
                        else:

                            listPhone_ = phone.split(findsplistPPhone)
                        (ven.office_number, ven.office_number2,
                         ven.mobile_number,
                         ven.mobile_number2) = self.processPhones(listPhone_)

                    if label_ == 'Postcode:':
                        zipcode = div__.find('./span').text
                    if label_ == 'Town:':
                        town_ = div__.find('./span').text
                    if label_ == 'Area:':
                        area_ = div__.find('./span').text
                    zipcode = self.validateZipcode(zipcode)
            if url == 'http://www.uksecurity-directory.co.uk/the-directory/1981/s-comm-vehicle-surveillance-system':
                print
            if ven.office_number == 'NOT_GB' or ven.office_number2 == 'NOT_GB' or ven.mobile_number == 'NOT_GB' or ven.mobile_number2 == 'NOT_GB':
                return
            for p in listPhone_:
                if p == town_:
                    town_ = ''
                    break

            ven.zipcode = zipcode
            ven.formatted_address = ', '.join([area_, town_, zipcode])

            ven.formatted_address = self.refixFormatAddress(
                ven.formatted_address.replace('0000000', ''))
            extraImg = xmlDoc.xpath('./div[@class="extra-images"]//a/img')
            listingThumbnail = xmlDoc.xpath(
                './div[@class="listing-thumbnail"]//a/img')
            for thumb in listingThumbnail:
                imgs.append(thumb.get('src'))
            for img in extraImg:
                imgs.append(img.get('src'))
            if len(imgs) > 0:
                ven.img_link = imgs
            self.index = self.index + 1
            ven.writeToFile(self.folder, self.index, ven.name, False)

        except Exception, ex:
            print '[ERROR] ' + url + ': ' + str(ex)
    def __VenueParser(self, item, city):
        existing = [x for x in self.listLink if item in x]
        self.listLink.append(item)
        if len(existing) <= 0:
            try:
                xmlDoc = Util.getRequestsXML(item, '/html')
                ven = Venue()
                ven.scrape_page = item
                #ven.city = city
                ven.name = xmlDoc.xpath(
                    '//div[@class="row top-buffer"]/h3')[0].text
                (ven.latitude, ven.longitude) = self.getLatlng(xmlDoc)
                xmlcontent = xmlDoc.find('.//div[@class="tab-content"]')
                services_schedule_info = xmlcontent.xpath(
                    './div/div[@class="row top-buffer"]/h4/parent::div')[0]
                if services_schedule_info != None:
                    services_schedule_info = ''.join(
                        services_schedule_info.itertext()).split('\n')
                    for it in services_schedule_info:
                        if it.find('Style:') != -1:
                            it = it[0:it.find('Schedule')]
                            it = it.strip()
                            ser_name = it[it.find('Style:') + len('Style:'):it.
                                          find('Ability level')]
                            cost = len(it)
                            cost_ = ['Cost:', 'Concession cost:']
                            char_cost = ''
                            for c in cost_:
                                if it.find(c) != -1:
                                    cost = it.find(c)
                                    char_cost = c
                                    break
                            #cost = it.find('Cost:')
                            if cost == -1:
                                cost = len(it)

                            ser_des = it[it.find('Ability level:') +
                                         len('Ability level:'):cost]
                            ser_price = it[cost +
                                           len(char_cost):it.find('GBP') +
                                           len('GBP')]
                            ser = Service()
                            ser.service = ser_name
                            ser.description = ser_des
                            ser.price = ser_price.replace('-', '')
                            ven.services = [ser]
                        if it.find('a.m.') != -1 or it.find('p.m.') != -1:
                            ven.opening_hours_raw = it.strip().replace(
                                '.Monday', ' | Monday').replace(
                                    '.Tuesday', ' | Tuesday').replace(
                                        '.Wednesday', ' | Wednesday').replace(
                                            '.Thursday',
                                            ' | Thursday').replace(
                                                '.Friday',
                                                ' | Friday').replace(
                                                    '.Saturday',
                                                    ' | Saturday').replace(
                                                        '.Sunday', ' | Sunday')
                            ven.opening_hours_raw = self.formatOpenhour(
                                ven.opening_hours_raw)
                address = xmlcontent.find('.//address')
                if address != None:

                    #print ET.dump(address)
                    address = ''.join(address.itertext()).replace(
                        'United Kingdom', '').strip()
                    address = self.validateAddress(address)

                    #address ='Ward Park Arras Pavilion,Gransha Road,Bangor,Northern Ireland,BT20 4TN'
                    ven.country = 'gb'
                    if address.upper().find('Ireland'.upper()) != -1:
                        if address.upper().find(
                                'Northern Ireland'.upper()) != -1:
                            ven.country = 'ie'
                    if address.endswith(','):
                        address = address[0:-1]
                    ven.formatted_address = address
                posted = xmlcontent.find('./div/div[@class="row"]/p')
                imgs = xmlcontent.xpath('.//a/img')
                img_ = []
                for img in imgs:
                    img_.append(img.get('src'))

                ven.img_link = img_
                if posted != None:
                    ven.hqdb_ad_posted = posted.text.replace(
                        'Last updated', '')
                    split_posted = ven.hqdb_ad_posted.split(',')
                    if len(split_posted) >= 3:
                        ven.hqdb_ad_posted = ', '.join(
                            split_posted[0:len(split_posted) - 1])
                ven.category = self.category
                #ven.country ='gb'
                des_info = xmlcontent.xpath(
                    '//div[@class="row top-buffer"]/h3')[1]
                #print des_info.text
                des_info = des_info.getparent()
                des__ = des_info.xpath('./p')

                ven.pricelist_link = [ven.scrape_page]
                ven.hqdb_featured_ad_type = 'none'

                ven.description = ''
                for des in des__:
                    ven.description += ''.join(des.itertext()) + ' '
                    des_info.remove(des)
                info = '____'.join(des_info.itertext())
                a = des_info.find('./a')
                if a != None:
                    a = a.get('href')
                    if a.find('facebook.com') == -1:
                        ven.business_website = a
                    else:
                        if a.startswith('http:'):
                            a = a.replace('http:', 'https:')
                        ven.facebook = a

                info = info.split('__')

                for inf in range(0, len(info)):
                    if info[inf] == 'Qualifications:':
                        ven.accreditations = info[inf + 2]
                    if info[inf] == 'Phone:':

                        phone = info[inf + 2].strip()

                        pattren = '(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)'
                        '''isEmail  = re.search(pattren, phone, flags=0)
                        if isEmail!=None:
                            ven.business_email = isEmail.group(0)
                            continue'''
                        find_charSplit = self.findSplitPhone(phone)
                        if find_charSplit == None:

                            issMail = re.search(pattren, phone, flags=0)
                            if issMail != None:
                                ven.business_email = issMail.group(0)
                                continue
                            phone = phone.replace('Mobile:', '').replace(
                                'ext.225', '').replace('O7',
                                                       '07').replace(' ', '')
                            if phone.startswith('07') or phone.startswith(
                                    '447'
                            ) or phone.startswith('+447') or phone.startswith(
                                    '00447') or phone.startswith(
                                        '+44(0)7') or phone.startswith(
                                            '44(0)7') or phone.startswith(
                                                '004407'):
                                ven.mobile_number = self.validatePhone__(
                                    phone, ven.country)
                            else:
                                ven.office_number = self.validatePhone__(
                                    phone, ven.country)
                        else:
                            phone = phone.split(find_charSplit)
                            for p in phone:
                                issMail = re.search(pattren, p, flags=0)
                                if issMail != None:
                                    ven.business_email = issMail.group(0)
                                    continue
                                p = p.replace('Mobile', '').replace(
                                    'ext225',
                                    '').replace('O7', '07').replace(' ', '')
                                if p.startswith('07') or p.startswith(
                                        '447'
                                ) or p.startswith('+447') or p.startswith(
                                        '00447'
                                ) or p.startswith('+44(0)7') or p.startswith(
                                        '44(0)7') or p.startswith('004407'):
                                    if ven.mobile_number != None:
                                        ven.mobile_number2 = self.validatePhone__(
                                            p, ven.country)
                                    else:
                                        ven.mobile_number = self.validatePhone__(
                                            p, ven.country)
                                else:
                                    if ven.office_number != None:
                                        ven.office_number2 = self.validatePhone__(
                                            p, ven.country)
                                    else:
                                        ven.office_number = self.validatePhone__(
                                            p, ven.country)
                isPhoneOverSea = self.checkPhoneOverSea([
                    ven.office_number, ven.office_number2, ven.mobile_number,
                    ven.mobile_number2
                ])
                if isPhoneOverSea == False:
                    index = self.addIndex()
                    print str(
                        index) + ' Scapping: ' + city + '---' + ven.scrape_page
                    #ven.is_get_by_address =True
                    ven.writeToFile(self.folder, index, ven.name, False)
            except Exception, ex:
                print ex
                return
 def __VenueParser(self, element):
     try:
         self.urlmarks += 1
         print '[COUNT]: ' + str(self.urlmarks)
         featured = 'featured'
         onclick = element.xpath('./td//a/@onclick')[0]
         detailLink = onclick[onclick.find("MM_openBrWindow('") +
                              len("MM_openBrWindow('"):onclick.find("','','"
                                                                    )]
         detailLink = self.__url__ + '/' + detailLink
         xmlDoc = Util.getRequestsXML(detailLink,
                                      '//table[@cellspacing="3"]')
         xmlDoc = xmlDoc[0]
         ven = Venue()
         ven.hqdb_featured_ad_type = featured
         ven.country = self._language
         ven.scrape_page = detailLink
         detail_ = xmlDoc.xpath('./tr/td/table')
         detail_1 = detail_[0]
         detail_2 = detail_[2]
         basicInfo = detail_1.find('./tr/td/table/tr/td[@class="text"]')
         email_website = basicInfo.getparent().xpath(
             '//table//div[@align="right"]/a')
         for aTag in email_website:
             link__ = aTag.get('href')
             if link__.find('mailto') != -1:
                 ven.business_email = link__.replace('mailto:', '')
             else:
                 if link__.find('http') != -1:
                     ven.business_website = link__
         openxml = detail_1.xpath('./tr')
         openxml = openxml[2].find('./td/table')  # table openning hour
         rows = openxml.xpath('./tr')
         dayofweek = {
             'Montag': 'Lunedì',
             'Dienstag': 'Martedì',
             'Mittwoch': 'Mercoledì',
             'Donnerstag': 'Giovedì',
             'Freitag': 'Venerdì',
             'Samstag': 'Sabato',
             'Sonntag': 'Domenica'
         }
         openning_hour_array = []
         for row in rows:
             tds = row.xpath('./td')
             if len(tds) > 0:
                 if tds[0].text != None:
                     if dayofweek.get(tds[0].text, "NULL") != "NULL":
                         record = ''
                         count_ = 0
                         for td in tds:
                             if dayofweek.get(td.text, "NULL") != "NULL":
                                 record += dayofweek.get(td.text) + ": "
                             else:
                                 if td.text.strip() != '-':
                                     record += td.text.replace('.',
                                                               ':') + ", "
                                 else:
                                     count_ += 1
                         record = record.strip()
                         if record.endswith(','):
                             record = record[0:-1]
                         if count_ < 3:
                             openning_hour_array.append(record)
         ven.opening_hours_raw = ' | '.join(openning_hour_array)
         basicInfo_ = ''.join(basicInfo.itertext()).split('\n')
         if basicInfo_[len(basicInfo_) - 1].find('Fax') != -1:
             basicInfo_ = basicInfo_[0:-1]
         phonenumber = basicInfo_[-1].strip().replace('Tel.',
                                                      '').replace(' ', '')
         zip_ci = basicInfo_[-2]
         street = basicInfo_[-3]
         contactName = basicInfo_[-4]
         name = ' '.join(basicInfo_[0:-4])
         (ven.office_number, ven.office_number2, ven.mobile_number,
          ven.mobile_number2) = self.processPhone([phonenumber])
         (ven.city, ven.zipcode) = self.processZipCity(zip_ci)
         if ven.zipcode != None:
             if self.validateZip(ven.zipcode) == None:
                 return
         ven.street = street
         ven.name_of_contact = contactName
         ven.name = name
         services = detail_2.xpath('./tr[@valign="top"]/td')
         if len(services) > 0:
             service_ = []
             services = services[0].text
             ven.services = self.__ServicesParser(services)
         self.index += 1
         ven.writeToFile(self.folder, self.index, ven.name, False)
     except Exception, ex:
         print ex
    def __VenueParser_2(self, element):
        try:
            featured = 'none'
            #print ET.dump(element)
            self.urlmarks += 1
            print '[COUNT]: ' + str(self.urlmarks)
            ven = Venue()
            ven.scrape_page = self._url_lstVenues + '#' + str(self.urlmarks)
            td = element.find('./td')
            div = td.find('./div')
            if div != None:
                a = div.find('./a').get('href')
                ven.business_website = a
                td.remove(div)
            basicInfo = ''.join(td.itertext())
            #basicInfo =td.text

            if self.urlmarks == 881:
                pass

            street = ''
            contactName = ''
            name = ''

            basicInfo_ = basicInfo.split('\n')
            if basicInfo_[len(basicInfo_) - 1].find('Fax') != -1:
                basicInfo_ = basicInfo_[0:-1]
            positionInArr = -1
            phoneNumber = basicInfo_[positionInArr].strip().replace(
                'Tel.', '').replace(' ', '')
            positionInArr -= 1
            local = basicInfo_[positionInArr]
            positionInArr -= 1
            street = basicInfo_[positionInArr]
            if self.isContactName(street) == True:
                contactName = street
                street = ''
                positionInArr += 1
            positionInArr -= 1
            if contactName == '':
                contactName = basicInfo_[positionInArr]

            if self.isContactName(contactName) == False:
                positionInArr += 1
                contactName = ''
            name = ' '.join(basicInfo_[0:positionInArr])

            (ven.office_number, ven.office_number2, ven.mobile_number,
             ven.mobile_number2) = self.processPhone([phoneNumber])
            (ven.city, ven.zipcode) = self.processZipCity(local)
            if ven.zipcode != None:
                if self.validateZip(ven.zipcode) == None:
                    return
            ven.street = street
            ven.name_of_contact = contactName
            ven.name = name
            ven.country = self._language
            ven.hqdb_featured_ad_type = featured
            self.venues[ven.scrape_page] = ven
        except Exception, ex:
            print ex
 def __VenueParser(self,hqdb_type, linkItems,subcate,cate):    
         #linkItems ='https://www.blauarbeit.de/p/modernisierung/_sanierung/berlin/daniel_kutscher/576667.htm'
         existing=[x for x in self.linkIn if linkItems in x]
         if len(existing)>0:
             print 'This venue exist in list'
             return None
         self.linkIn.append(linkItems)
         
         
         
         xmlPages = self.getRequest(linkItems)
         if xmlPages==None:
             return None
       
     
         xmlVen = xmlPages.xpath('//div[@class="page_move"]')
         cate__ = xmlPages.find('.//meta[@name="Description"]')
         
         if len(xmlVen)==0:
             return None
     
         name = xmlVen[0].xpath('.//h2')
         if len(name) <=0:
             name =''
         else:
             name = name[0].text.strip()
         noneValues ={'ZERO','NULL'}
         if name.upper() in noneValues:
             return None
         ven = Venue()
         
         if cate__!=None:
             ven.category = cate__.get('content').split(',')[0]
             
             
         nameFromUrl = self.getNamefromUrl(linkItems)
         ven.name =  nameFromUrl
         ven.hqdb_featured_ad_type = hqdb_type
         #ven.name =name
         ven.scrape_page = linkItems
         #ven.subcategory = subcate
         #ven.category= cate
         address_= ''
         #ven.formatted_address=''
         img_link= []
         divInfo = xmlVen[0].find('.//div[@class="content_wrapper content_wrapper_main clearfix"]/div')
         if divInfo!=None:
             mainInfo =  divInfo.xpath('./section')    
             if len(mainInfo)>=2:
                 leftInfo =  mainInfo[0]
                 rightInfo = mainInfo[1]
                 tableInfo = leftInfo.find('./div/div[@class="profile_top_left"]/table')
                 trinfo = tableInfo.xpath('./tr')
                 for tr_ in trinfo:
                     td =tr_.xpath('./td')
                     if len(td)<2:
                         continue
                     key_ = ''.join(td[0].itertext()).strip()
                     values_ = ' '.join(td[1].itertext()).strip().replace('keine Angabe','').replace('NULL','').replace('null','')
                     if key_ =='Ansprechpartner:':
                         if values_!=None and len(values_)>2:
                             #values_ =''
                             ven.name_of_contact = values_
                             ven.name +=', '+ ven.name_of_contact
                         
                     if key_ =='Addresse:':
                         
                         address_ =  values_
                         ven.formatted_address = self.validateFormat(address_)
                         
                         
                         
                         
                         
                         '''(ven.street,ven.city,ven.zipcode) = self.processAddress(address_)
                         if ven.street!=None:
                             ven.street = self.validateStreet2(ven.street)
                         #ven.formatted_address = address_
                         if ven.city!=None:
                             checkCity = ven.city.split() 
                             if len(checkCity)>0:
                                 if checkCity[0].isdigit():
                                     if len(checkCity[0])==5:
                                         if ven.street!=None:
                                             ven.street+=' '+ ven.zipcode
                                         ven.zipcode = checkCity[0]
                                         ven.city = ven.city.replace(ven.zipcode,'')
                                     else:
                                         ven.city = None
                                         ven.street = None
                                         ven.zipcode= None
                                         ven.formatted_address = ' '.join(checkCity)
                             
                             
                             
                         if ven.zipcode!=None:
                             if len(ven.zipcode)==5:
                                 ven.zipcode = ven.zipcode
                             else:
                                 ven.zipcode = None'''
                         
                         
                         
                     if key_ =='Homepage:':
                         a_ = td[1].find('./a')
                         if a_ !=None:
                             ven.business_website = a_.get('href')
                     mobileCode =['015','016','017','+4915','+4916','+4917']
                     if key_ =='Tel:':
                         values_ = values_.replace('/', '').replace(' ', '').replace('Tel', '')
                         
                         #values_ ='01735465435'
                         
                         
                         for mCode in mobileCode:
                             if values_.startswith(mCode):
                                 ven.mobile_number = self.validatePhone__(self.validatePhone(values_), 'de')
                                 break
                         if ven.mobile_number==None:
                             ven.office_number = self.validatePhone__(self.validatePhone(values_), 'de')
                         
                         '''if values_.startswith('01')| values_.startswith('+0041')| values_.startswith('0041'):
                             ven.mobile_number = self.validatePhone__(self.validatePhone(values_), 'de')
                         else:
                             ven.office_number = self.validatePhone__(self.validatePhone(values_), 'de')'''
                         
                 img_ = leftInfo.find('./div/div[@class="profile_top_right"]/img')
                 if img_!=None:
                     img_ =img_.get('src')
                     img_link.append(img_)
                 rating = leftInfo.xpath('.//section[@id="ratings"]/div')
                 if len(rating)>=2:
                     rating1 = ''.join(rating[0].itertext()).strip().split()[1]
                     rating2 = ''.join(rating[1].itertext()).strip()
                     if len(rating2)>0:
                         rating2 = rating2.split()[0]
                         if rating2.find('/')!=-1:
                             rating2 =  rating2.split('/')[0].replace(',','.')
                     try:
                         float(rating2)
                     except Exception,ex:
                         rating2=None
                     ven.hqdb_nr_reviews = rating1
                     ven.hqdb_review_score = rating2
                 
                 
                 if ven.hqdb_review_score==None:
                     scoreIn = xmlVen[0].xpath('//div[@class="float_box"]//span[@class="txtLight"]/parent::div')
                     if len(scoreIn)>0:
                         core_ = scoreIn[0].text.replace(',','.')
                         try:
                             float(core_)
                         except Exception,ex:
                             core_ =None
                         ven.hqdb_review_score = core_
                 script_ = xmlPages.xpath('./head/script')
                 if ven.formatted_address.strip()=='' and ven.office_number==None and ven.office_number2 ==None and ven.mobile_number ==None and ven.mobile_number2 ==None:
                     return None
                 
                 '''streetTemp = ven.street
                 cityTemp =ven.city
                 zipcodeTemp =ven.zipcode
                 
                 if streetTemp ==None:
                     streetTemp =''
                 if ven.city ==None:
                     cityTemp = ''
                 if ven.zipcode ==None:
                     zipcodeTemp =''
                 address_ = streetTemp+', '+cityTemp+', '+zipcodeTemp
                 address_ = address_.strip().replace(', ,', ',').replace(',,', ',')
                 if address_.startswith(','):
                     address_ =address_[1:len(address_)]
                 if address_.endswith(','):
                     address_ = address_[0:len(address_)-1]
                     
                 if ven.formatted_address!=None:
                     address_ = ven.formatted_address'''
                 
                 #if len(address_.strip())>5:
                 #    (ven.latitude,ven.longitude)  = self.getLatlng(address_,'DE') #script_
                 zipFrom = self.findZipcode(ven.formatted_address)
                 if zipFrom!=None:
                     (ven.latitude,ven.longitude) = self.getLatlng(zipFrom, 'DE')
                     if ven.latitude ==None and ven.longitude==None:
                         Util.log.running_logger.info(ven.formatted_address+' : cannot get GEO code')
                 redirecPhotos= rightInfo.find('./nav/div/ul/li[@class="tabOff tab_foto"]/a')
                 if redirecPhotos!=None:
                     linkPhotos =  redirecPhotos.get('href')
                     if linkPhotos.startswith('/'):
                         linkPhotos = self.__url__+ linkPhotos
                     #time.sleep(1)
                     xpathPhotos =  Util.getRequestsXML(linkPhotos, '//div[@class="portfolio thumbs"]/a')
                     if xpathPhotos!=None:
                         listImg = xpathPhotos.xpath('./a')
                         for __img in listImg:
                             img_link.append(__img.get('data-thumb'))
                 
                 
                 desElement= rightInfo.find('./div/div[@id="cont_about"]')
                 
                 
                 '''
                 pTag = desElement.xpath('//div[@class="overview"]/p')
                 des = ''
                 for desE in pTag :
                     if ''.join(desE.itertext()).find('<xml>')>=0:
                         continue
                     des+=''.join(desE.itertext())
                 h5Tag = desElement.xpath('//div[@class="overview"]/h5')
                 for desE_ in h5Tag:
                     if ''.join(desE_.itertext()).find('<xml>')>=0:
                         continue
                     des += ''.join(desE_.itertext())
                 divTag =desElement.xpath('//div[@class="overview"]/h5')
                 for div_ in divTag:
                     if ''.join(div_.itertext()).find('<xml>')>=0:
                         continue
                     des+= ''.join(div_.itertext())
                 if len(pTag)==0 and len(h5Tag) ==0:
                     if desElement.find('.//div[@class="overview"]')!=None:
                         des =  desElement.find('.//div[@class="overview"]').text
                 ven.description = self.validateDes(des)
                 '''
                 des =''
                 divTag = desElement.xpath('//div[@class="overview"]')
                 for divDes in divTag:
                     des+= ' '.join(divDes.itertext())
                 ven.description =  self.validateDes(des)
                 
                 
          
                 
                 
                 certi = rightInfo.find('.//div/div[@id="cont_certs"]')
                 tablecerti =  certi.find('./table')
                 if tablecerti!=None:
                     certi_ = ''.join(tablecerti.itertext()).replace('Geprüfte Zertifikate:','')
                     ven.accreditations = certi_
                 ven.img_link = img_link
                 ven.country ='de'
                 ven.is_get_by_address = True
                 return ven
    def __VenueParser(self, venueElement):
        try:
            img_link = []
            ad_type = "none"
            if venueElement.find(
                    './/span[@class="label label-success"]') != None:
                ad_type = "featured"
            divs = venueElement.xpath('./div')
            logo_ = divs[0].find('.//img')
            if logo_ != None:
                img_link.append(self.__url__ + logo_.get('src'))
            url__ = venueElement.xpath(
                './div[@class="col-xs-9 col-sm-9 col-md-9 listing-body"]//div[@class="h4 listing-heading"]/a'
            )
            if url__ != None:
                url__ = url__[0].get('href')
                url__ = self.__url__ + url__
                '''
                files = open('D:\\test.txt','a')
                files.write(url__+'\r\n')
                files.close()
                '''
                existing = [x for x in self.listLink if url__ in x]
                if len(existing) <= 0:
                    self.listLink.append(url__)
                    print 'Scraping' + ' : ' + url__

                    #if url__ =='http://www.garagesandrecovery.co.uk/business/dorset-auto-repirs':
                    #    print 'Debug'

                    xmlDoc = Util.getRequestsXML(
                        url__, '//body/div[@class="page-wrapper"]')
                    ven = Venue()
                    ven.name = xmlDoc.find(
                        './/div[@class="page-heading"]//h1').text
                    content = xmlDoc.find(
                        './/div[@class="container page-content"]')
                    if content != None:
                        des_img = content.find('.//div[@class="article-body"]')
                        if des_img != None:
                            div_img = des_img.xpath('.//img/parent::div')
                            if len(div_img) > 0:
                                des_img.remove(div_img[0])
                            des = ' '.join(des_img.itertext())
                            ven.description = des
                        ven.country = self._language
                        ven.scrape_page = url__
                        ven.hqdb_featured_ad_type = ad_type
                        offices_ = content.xpath(
                            './/div[@id="offices"]/parent::div/div[@class="row"]'
                        )
                        div_maps = offices_[0].find(
                            './/div[@class="google-map"]')
                        if div_maps != None:
                            ven.latitude = div_maps.get('data-lat')
                            ven.longitude = div_maps.get('data-lng')
                        info_ = offices_[0].xpath(
                            './div[@class="col-md-5 col-sm-6"]')
                        info_ = info_[0]
                        ul = info_.xpath('./ul')
                        phones = []
                        for u in ul:
                            phone_ = u.xpath('./li/a')
                            for phone in phone_:
                                if phone.get('title') == 'Phone Number':
                                    phone = phone.text.replace(' ', '')
                                    if phone.startswith('0800'):
                                        continue
                                    else:
                                        phones.append(phone)
                        if len(ul) >= 2:
                            ul_2 = ul[0]
                            li__ = ul_2.xpath('./li')

                            address = ''
                            for li in li__:
                                if li.get('class') != 'text-bold':
                                    address = '\n'.join(li.itertext())
                                    addressArr = address.split('\n')
                                    if len(addressArr) >= 3:
                                        ven.street = addressArr[len(addressArr)
                                                                - 3]
                                    ven.city = addressArr[len(addressArr) -
                                                          2].split(',')[0]
                                    ven.zipcode = addressArr[len(addressArr) -
                                                             1]
                                    if ven.zipcode != None:
                                        results = re.search(self.ukReg,
                                                            ven.zipcode,
                                                            flags=0)
                                        if ven.zipcode == 'Rotherham, South Yorkshire':
                                            ven.zipcode = ''
                                            ven.street = None
                                        if results == None:
                                            ven.zipcode = None

                        (ven.office_number, ven.office_number2,
                         ven.mobile_number,
                         ven.mobile_number2) = self.processPhones(phones)

                        # right sidebar : //div[@class="col-md-3 page-sidebar"]/div
                        rightSidebar = xmlDoc.xpath(
                            './/div[@class="col-md-3 page-sidebar"]/div[@class="section"]'
                        )
                        for right in rightSidebar:

                            website = right.xpath(
                                './a[contains(text(),"Visit Our Website")]')
                            if len(website) > 0:
                                website = website[0].get('href')
                                if website.find('facebook.com') == -1:
                                    ven.business_website = website
                                else:
                                    ven.facebook = website
                            reviews = right.xpath('./p/strong')
                            if len(reviews) >= 3:
                                ven.hqdb_nr_reviews = reviews[2].text
                                ven.hqdb_review_score = reviews[1].text
                            follows = right.xpath('./ul/li/a')
                            for foll in follows:
                                follow_link = foll.get('href')
                                if follow_link.find('facebook.com') != -1:
                                    if ven.facebook == None:
                                        ven.facebook = self.addHTTP(
                                            follow_link)
                                if follow_link.find('twitter.com') != -1:
                                    if ven.twitter == None:
                                        ven.twitter = self.addHTTP(follow_link)

                        img_find = xmlDoc.xpath(
                            '//div[@id="galleries"]/parent::div/div[@class="carousel slide equal-height"]//img'
                        )
                        for ig in img_find:
                            img_link.append(self.__url__ + ig.get('src'))

                        if len(img_link) > 0:
                            ven.img_link = img_link
                        self.index += 1
                        ven.writeToFile(self.folder, self.index, ven.name,
                                        False)
                        #img_link : //div[@id="galleries"]/parent::div/div[@class="carousel slide equal-height"]//img

                else:
                    print '\nduplicate'.upper()
                    print '*' * (len(url__) + 4)
                    print '*' + ' ' * (len(url__) + 2) + '*'
                    print '* ' + url__ + ' *'
                    print '*' + ' ' * (len(url__) + 2) + '*'
                    print '*' * (len(url__) + 4) + '\n'

        except Exception, ex:
            print ex
Exemple #8
0
    def __VenueParser(self, link):
        #link ='https://www.meilleur-garagiste.com/annuaire/garage-la-couronne.464207.html'
        print 'Scrapping: ' + link + '\n'
        existing = [x for x in self.link_venues if link in x]
        if len(existing) > 0:
            print 'Len existing : ' + str(len(existing))
            return
        xmlBody = Util.getRequestsXML(link, '//div[@id="fiche-artisan"]')
        if xmlBody != None and len(xmlBody) > 0:
            ven = Venue()
            name_ = xmlBody.xpath('.//h1/parent::div')
            if len(name_) > 0:
                if name_ != None:
                    name_h1 = name_[0].find('./h1')
                    name_h2 = name_[0].find('.//h2')
                    if name_h2 != None:
                        ven.name = name_h1.text
                    else:
                        ven.name = name_h1.text

            else:
                return
            xmldiv = xmlBody.find('.//div[@class="row nomargin"]/div')
            if xmldiv == None:
                return
            span_ = xmldiv.xpath('./span')
            for i_ in span_:
                if i_.get('class') == 'street-address text-hide-mobile':
                    ven.street = i_.text
                    if ven.street != None:
                        #ven.street = self.validateStreet(ven.street).replace('43442491700012', '')
                        ven.street = self.validateStreet2(ven.street).replace(
                            '43442491700012', '')
                        #ven.street = self.replaceChar('-', self.replaceChar(',', ven.street, True), True)
                        #ven.street = self.replaceChar(',', self.replaceChar('-', ven.street, True), True)
                        ven.street = self.replaceChar('-', ven.street, False)
                        for r in self.removeFromStreet:
                            ven.street = self.replaceChar(r, ven.street, True)
                        if ven.street.strip() == '.':
                            ven.street = None
                if i_.get('class') == 'postal-code':
                    ven.zipcode = i_.text
                    ven.zipcode = self.validateZipcode(ven.zipcode)
                if i_.get('class') == 'locality':
                    ven.city = i_.text
            a = xmlBody.find(
                './/a[@class="col m12 s4 tel waves-effect waves-light btn center btn-fix bleu"]'
            )
            if a != None:
                phone = a.get('href').replace('tel:', '').replace(' ', '')
                if phone.startswith('07') | phone.startswith('06'):
                    ven.mobile_number = self.validatePhone__(phone, 'FR')
                else:
                    ven.office_number = self.validatePhone__(phone, 'FR')
            logo = xmlBody.find('.//div[@class="center-align"]/img')
            if logo != None:
                ven.img_link = [self.__url__ + logo.get('src')]
            ven.scrape_page = link
            ven.pricelist_link = [link]
            listServices = xmlBody.xpath(
                '//li/div[@class="collapsible-body"]/div/a')
            sers = []
            for ser in listServices:
                servic = Service()
                servic.service = ser.text
                sers.append(servic)
                self.services.append(servic)
            ven.services = sers
            if ven.city != None and ven.zipcode != None:
                if ven.street != None and len(ven.street) > 0:
                    add_ = ven.street + ', ' + ven.city + ', ' + ven.zipcode
                else:
                    add_ = ven.city + ', ' + ven.zipcode
            else:
                add_ = None
            '''(ven.latitude,ven.longitude) = self.getLatlng(add_, 'FR')
            if ven.latitude == None and ven.longitude ==None:
                Util.log.coordinate_logger.error(ven.scrape_page+' : Cannot get GEO code')'''
            self.link_venues.append(link)
            ven.country = 'fr'
            desc = xmlBody.find('.//p[@id="description"]')
            desc_ = ''
            if desc != None:
                desc_ = ''.join(desc.itertext()).strip().replace('\n',
                                                                 '|').replace(
                                                                     '\t', '')
            title = xmlBody.find('.//div[@class="container"]//h2')
            if title != None and desc != None:
                desc_ = title.text + ' | ' + desc_
            img_link_arr = []
            desc_ = self.replace__(desc_)
            desc_ = self.replaceSame(desc_, '||', '|').replace('|', ' | ')
            ven.description = desc_
            img_link = xmlBody.find('.//div[@class="realisations"]/img')
            if img_link != None:
                temp_img = ven.img_link = self.__url__ + img_link.get('src')
                img_link_arr.append(temp_img)
            multi_img = xmlBody.xpath(
                '//div[@class="3photo realisations"]/div/img')
            for it in multi_img:
                temp_ml = self.__url__ + it.get('src')
                img_link_arr.append(temp_ml)
            if len(img_link_arr) > 0:
                ven.img_link = img_link_arr
            nr_reviewer = xmlBody.xpath('//div[@class="avisoperation row"]')
            if len(nr_reviewer) > 0:
                ven.hqdb_nr_reviews = str(len(nr_reviewer))
            ven.is_get_by_address = True
            ven.category = 'Garages/Car services'
            featureAd = xmlBody.find(
                './/a[@class="vert-text modal-trigger"]/strong')
            if featureAd != None:
                text = featureAd.text.replace('é', 'e')
                if text == 'Entreprise verifiee ':
                    ven.hqdb_featured_ad_type = 'featured'
            if ven.zipcode != None and len(
                    ven.zipcode) > 0 and ven.zipcode.isdigit():
                zip_ = int(ven.zipcode)
                if zip_ < 1000:
                    Util.log.running_logger.error(
                        link + ': Oversea of Fr - Zipcode:' + ven.zipcode)
                    return
                if zip_ > 95978:
                    Util.log.running_logger.error(
                        link + ': Oversea of Fr - Zipcode:' + ven.zipcode)
                    return
                if len(ven.zipcode) >= 4:
                    if len(ven.zipcode) == 4:
                        ven.zipcode = '0' + ven.zipcode
            index_ = self.addIndex()
            print 'Writing files: ' + str(index_) + '\n'
            ven.writeToFile(self.folder, index_, ven.name, False)
            print str(len(self.services)) + ' services\n'
Exemple #9
0
    def __VenueParser(self, element, cate, scrappages):
        subA = element.find('./div/a')
        link = subA.get('href')
        try:

            #if link =='http://es.qdq.com/f:1-GV9-6082/':
            #    print
            existing = [x for x in self.listLink if link in x]
            print 'Scraping : ' + link
            if len(existing) <= 0:

                self.listLink.append(link)

                ven = Venue()
                #ven.name = subA.find('./div/h2').text
                ven.scrape_page = link
                #ven.subcategory = cate
                ven.category = cate
                ven.country = self._language
                ven.hqdb_featured_ad_type = "none"
                address = subA.xpath('./div/p/span')
                for span in address:
                    itemprop = span.get('itemprop')
                    if itemprop == 'street-address':
                        ven.street = span.text
                    if itemprop == 'postal-code':
                        ven.zipcode = span.text
                    if itemprop == 'locality':

                        # before the first "," and before the "/"

                        ven.city = span.text  #.split(',')[0]
                        if ven.city == '' or ven.city == None:
                            continue

                        find_slash = ven.city.find('/')
                        find_comma = ven.city.find(',')
                        if find_slash != -1 and find_comma != -1:
                            ven.city = ven.city.split('/')[0]
                            if ven.city.find(',') != -1:
                                ven.city = ven.city.split(',')[1]
                        ven.city = ven.city.split(',')[0]
                        ven.city = ven.city.split('/')[0]
                if ven.street != None:
                    ven.street = self.validateStreet(ven.street)
                if ven.city != None:
                    re_City = re.search(
                        '(?:(?:[1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3})',
                        ven.city,
                        flags=0)
                    if re_City != None:
                        ven.city = ven.city.replace(re_City.group(0), '')
                if ven.zipcode != None:
                    ven.zipcode = ven.zipcode.strip()
                    if len(ven.zipcode) >= 5:
                        re_zipcode = re.search(
                            '(?:(?:[1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3})',
                            ven.zipcode,
                            flags=0)
                        if re_zipcode != None:
                            if re_zipcode.group(0) != ven.zipcode:
                                ven.zipcode = None
                        else:
                            ven.zipcode = None
                    else:
                        ven.zipcode = '0' + ven.zipcode
                        rezipcode = re.search(
                            '(?:(?:[1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3})',
                            ven.zipcode,
                            flags=0)
                        if rezipcode == None:
                            ven.zipcode = None
                        else:
                            if ven.zipcode != rezipcode.group(0):
                                ven.zipcode = None

                try:
                    if int(ven.zipcode) > 52080 or int(ven.zipcode) < 1000:
                        ven.zipcode = None
                except Exception, ex:
                    ven.zipcode = None

                detail = Util.getRequestsXML(link, '//div[@id="contenido"]')
                ven.name = detail.find('.//h1').text  #.replace('Niño','Niño')
                #ven.name = Validator.RevalidName(ven.name)
                ven.name = self.replaceName(ven.name)
                phone = detail.find('.//span[@class="telefonoCliente"]')
                if phone != None:
                    phone = phone.text
                    if phone.startswith('6') or phone.startswith('7'):
                        ven.mobile_number = '' + phone
                        ven.mobile_number = self.validatePhone__(
                            ven.mobile_number)
                    else:
                        ven.office_number = '' + phone
                        ven.office_number = self.validatePhone__(
                            ven.office_number)
                maps = detail.find('.//div[@id="mymap"]/img')
                if maps != None:
                    maps = maps.get('src')
                    (ven.latitude, ven.longitude) = self.getLatlng(maps)
                #ven.is_get_by_address =True
                ven.writeToFile(self.folder, self.addIndex(), ven.name, False)
            else:
Exemple #10
0
    def __VenueParser_2(self, element, cate, scrape_pages):
        subB = element.find('./div/a')
        link = subB.get('href')

        try:
            existing = [x for x in self.listLink if link in x]
            if len(existing) <= 0:
                print 'Scraping Feature : ' + link

                self.listLink.append(link)
                ven = Venue()
                ven.country = self._language
                ven.hqdb_featured_ad_type = 'featured'
                ven.category = cate
                #ven.subcategory = cate
                ven.scrape_page = scrape_pages
                subDiv = element.find('./div[@class="resultado nada"]')
                div = subDiv.find('./a/div')
                ven.name = div.find('./h2').text  #.replace('Niño','Niño')
                '''if ven.name =='Niño de la Virgen':
                    print'''
                #ven.name = Validator.RevalidName(ven.name)
                ven.name = self.replaceName(ven.name)
                address = div.xpath('./p[@itemprop="address"]/span')
                if address != None:
                    for span in address:
                        itemprop = span.get('itemprop')
                        if itemprop == 'street-address':
                            ven.street = span.text
                        if itemprop == 'postal-code':
                            ven.zipcode = span.text
                        if itemprop == 'locality':
                            ven.city = span.text  #.split(',')[0]
                            if ven.city == '' or ven.city == None:
                                continue
                            find_slash = ven.city.find('/')
                            find_comma = ven.city.find(',')
                            if find_slash != -1 and find_comma != -1:
                                ven.city = ven.city.split('/')[0]
                                if ven.city.find(',') != -1:
                                    ven.city = ven.city.split(',')[1]
                            ven.city = ven.city.split(',')[0]
                            ven.city = ven.city.split('/')[0]
                    if ven.street != None:
                        ven.street = self.validateStreet(ven.street)
                    if ven.city != None:
                        re_City = re.search(
                            '(?:(?:[1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3})',
                            ven.city,
                            flags=0)
                        if re_City != None:
                            ven.city = ven.city.replace(re_City.group(0), '')
                    if ven.zipcode != None:
                        ven.zipcode = ven.zipcode.strip()
                        if len(ven.zipcode) >= 5:
                            re_zipcode = re.search(
                                '(?:(?:[1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3})',
                                ven.zipcode,
                                flags=0)
                            if re_zipcode != None:
                                if re_zipcode.group(0) != ven.zipcode:
                                    ven.zipcode = None
                            else:
                                ven.zipcode = None
                        else:
                            ven.zipcode = '0' + ven.zipcode
                            rezipcode = re.search(
                                '(?:(?:[1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3})',
                                ven.zipcode,
                                flags=0)
                            if rezipcode == None:
                                ven.zipcode = None
                            else:
                                if ven.zipcode != rezipcode.group(0):
                                    ven.zipcode = None

                try:
                    if int(ven.zipcode) > 52080 or int(ven.zipcode) < 1000:
                        ven.zipcode = None
                except Exception, ex:
                    ven.zipcode = None

                description = div.find('./p[@class="descripcion"]').text
                if description != None:
                    ven.description = description
                imgs = subDiv.xpath('./a/figure/img')
                if len(imgs) > 0:
                    imgs_ = []
                    for im in imgs:
                        imgs_.append(im.get('src'))
                    ven.img_link = imgs_
                footer = subDiv.xpath('./div[@class="iconos"]/ul/li')
                for fo in footer:
                    text__ = fo.find('./a').text
                    if text__ == 'Mandar mail':
                        ven.business_website = fo.find('./a').get('href')
                    if text__ == 'Ver teléfono':
                        phone = fo.find('./span[@class="telefono"]').text
                        if phone.startswith('+346') or phone.startswith(
                                '+347') or phone.startswith(
                                    '7') or phone.startswith('6'):
                            ven.mobile_number = self.validatePhone__(phone)
                        else:
                            ven.office_number = self.validatePhone__(phone)
                #ven.is_get_by_address =True
                ven.writeToFile(self.folder, self.addIndex(), ven.name, False)
            else: