#! /usr/bin/env python# -*- coding: utf-8 -*-import reimport timefrom urllib import *class Http_Request: def getURL(self,url): # Загрузка страницы return str(urlopen(url).read())class YaBot(Http_Request): def get_ya_page(self, request, page, region = 1): # Создание поискового запроса page = page-1 # страницы Яндекса начинаются с 0 request + \ '&p=' + \ str(page) + \ '&lr=' + \ str(region) # Возвращаем страницу поиска return self.getURL(url) def site_place(self, site, # сайт, который ищем в поиске request, # поисковый запрос для анализа to_page, # кол-во страниц поиска для анализа per_page = 10, # кол-во результатов на странице region = 1): # регион поиска, подробнее тут: for page in range(1, to_page+1): # Запрос очередной страницы поиска data = self.get_ya_page(request, page, region) # Подготовка регулярных выражений для поиска на # странице результатов Яндекса # Номера позиций position_regex = re.compile(r'<b class="b-serp-item__number">([0-9]+)</b>') # Адреса страниц (пока не используется) search_url_regex = re.compile(r'<a class="b-serp-item__title-link" tabindex.+href="([^"]+)') # Адреса сайтов url_regex = re.compile('<a class="b-serp-item__title-link" tabindex.+href="http[s]?://([^"/]+\.[a-z]{2,4})') # Каптча captcha_regex = re.compile('<div class="b-captcha">') # Поиск на странице результатов Яндекса positions = position_regex.findall(data) # search_urls = search_url_regex.findall(data) urls = url_regex.findall(data) captcha = captcha_regex.findall(data) if captcha: return -2 for position in positions[:per_page]: if urls[int(position)-((page-1)*per_page)-1].upper() == site.upper(): return position time.sleep(3) # Антикаптча return -1def main(): ya = YaBot() request = 'диван' region = 1 # Москва site_position = ya.site_place(site, request, 5, region = region) if site_position == -1: print 'Сайт в поиске не найден' elif site_position == -2: print 'CAPTCHA' else: print 'Позиция: '+str(site_position)if __name__ == "__main__": main()
No comments:
Post a Comment