кто поможет/подскажет как можно вытянуть данные с сайта http://www.edu-inform.ru/university/ в формате адрес, телефон, почта,сайт
1. цикличный PHP или JS по регулярным выражениям из исходника 2. цикличный PHP по обрезанию исходника JS можно написать в дополнениях и запускать прямо из браузера так как элементам теперь чаще дают идентификаторы, то обрезание кода не составляет труда, тут элементы выделены. есть и другие варианты, я два наиболее удобных для меня выбрал
Парсер университетов, вузов Там все двумя регулярками делается, ну или через сторонние библиотеки, такие как lxml,xml. Code: #!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'Artur Fis' from grab.spider import Spider,Task from lxml.html import tostring,fromstring from lxml.html.clean import clean_html from sqLite import NewSqlEngine class UniversityGrab(Spider): initial_urls = ['http://www.edu-inform.ru/university/?PAGEN_1=%s' % str(i) for i in range(1,15)] results = [] sql = NewSqlEngine('universities.db') page_number = 0 university_count = 0 def prepare(self): self.page_count = len(self.initial_urls) self.sql.create_table('university',{'telephone':'TEXT','address':'TEXT','site':'TEXT','email':'TEXT'}) def print_statistic(self): process = int((self.university_count*100)/236) print 'Process = ',process,'%,','count = ',self.university_count def task_initial(self,grab,task): for university_url in grab.xpath_list('//a[@class="op_text"]'): url = grab.make_url_absolute(university_url.get('href')) yield Task('grab_data',url = url) self.page_number +=1 self.print_statistic() def task_grab_data(self,grab,task): #print grab.response.headers university = tostring(grab.xpath('//div[@class="card_content"]')) university_data = fromstring(university).xpath('//p') push_data = {'telephone':'','address':'','site':'','email':''} for data in university_data: text_data = clean_html(data).text_content() if isinstance(text_data,str): text = str(text_data) elif isinstance(text_data,unicode): text = text_data.encode('windows-1251') if u'Тел.' in text_data: push_data['telephone'] = text elif u'Адрес:' in text_data: push_data['address'] = text else: if ' ' in text_data: text = text.split(' ') if '@' in text[0]: push_data['email'] = text[0] push_data['site'] = text[1] elif '@' in text[1]: push_data['email'] = text[1] push_data['site'] = text[0] else: if '@' in text: push_data['email'] = text else: push_data['site'] = text self.results.append(push_data) self.sql.put('university',push_data) self.university_count += 1 Grabber = UniversityGrab(thread_number=3) Grabber.run() Grabber.sql.close() Grabber.print_statistic() Процесс сбора: Code: [COLOR=Green]Process = 0 %, count = 0 Process = 0 %, count = 0 Process = 0 %, count = 0 Process = 12 %, count = 30 Process = 20 %, count = 48 Process = 27 %, count = 64 Process = 32 %, count = 77 Process = 40 %, count = 95 Process = 40 %, count = 95 Process = 48 %, count = 114 Process = 48 %, count = 115 Process = 62 %, count = 148 Process = 72 %, count = 171 Process = 79 %, count = 188 Process = 100 %, count = 236[/COLOR] Собранная БД: http://rghost.ru/49129196 [universities.db (42.0 КБ)] В БД одна таблица. Структура таблицы: site, email, telephone, adress