Guest User

Untitled

a guest
Mar 21st, 2012
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.23 KB | None | 0 0
  1. # coding=utf-8
  2.  
  3. from modules.engine import engine
  4. from pyquery import PyQuery as pq
  5. import re, random, urllib, ConfigParser, time, datetime
  6.  
  7.  
  8. config_file = "/home/parser/checker/config.ini"
  9. config = ConfigParser.ConfigParser()
  10. config.read(config_file)
  11.  
  12. class google(engine):
  13.     def __init__(self):
  14.         pass
  15.  
  16.     def make_req(self, e, q): #принимается движок и keyword
  17.         #words = q.split(' ')
  18.         #s = 'intext:"%s" (intitle:"%s" AND intext:"%s")' % (e.searchString(), q, q)
  19.         s = 'intext:"%s" %s' % (e.searchString(), q)
  20.         #if words and len(words) > 3 :
  21.         #   s = 'intext:"%s"' % e.searchString() + " AND ".join(['intitle:"%s" AND intext:"%s"' % (w,w) for w in words])
  22.         return s
  23.  
  24.     def parse(self, q):
  25.         #print "google engine started parsing!", q
  26.         forbidden_sites = config.get('search', 'forbidden_sites').split(", ")
  27.         max_pages = config.getint('search', 'max_pages')
  28.         page_src = False
  29.         results_url = "http://www.google.com/search?tbs=sbd:1,qdr:y&hl=en&q=%s&num=%d "
  30.         for i in range(5): #Пытаемся 5 раз загрузить страничку
  31.             onpage_count = random.randint(41,59)
  32.             try:
  33.                 #составляется урл для запроса к гуглу, с рандомным количеством результатов на странице (41-59)
  34.                 url = results_url % (urllib.quote(q), onpage_count)
  35.             except:
  36.                 print "cant build search link...breaking..."
  37.                 break
  38.             page_src = self.loadPage(url) #загружаем хтмл по ссылке
  39.             if not page_src :
  40.                 print "search engine cant load page by builded url:", url
  41.                 break
  42.             else:
  43.                 pass
  44.                 #results_url += "&"
  45.             time.sleep(1)
  46.         results_links = []
  47.         if page_src :
  48.             print  "parsing loaded page for links..."
  49.             d = pq(page_src) #pq это библиотечка, вроде jQuery
  50.             results_links = [d(el).attr("href") for el in d("a.l")] #получаем список ссылок из результатов запроса к поисковику
  51.             print " < first page"
  52.             ''' #пока отключен парсинг дополнительных страниц выдачи
  53.             for l in [d(el).attr("href") for el in d("#nav a")][:max_pages]:    #получаем ссылки на остальные страницы выдачи
  54.                 for j in range(5):
  55.                     page_src = self.loadPage("http://www.google.com" + l)   #загружаем остальные страницы выдачи
  56.                     if page_src :
  57.                         _d = pq(page_src)
  58.                         for el in _d("a.l") :
  59.                             results_links.append(_d(el).attr("href"))   #добавляем ссылки с других страниц
  60.                         break
  61.                     else:
  62.                         l += "&"
  63.                 print " < next page"
  64.             '''
  65.         print " <<< parsed : " , len(results_links)
  66.         results_links = [elem for elem in results_links if not any([i in elem for i in forbidden_sites])]
  67.         #неведомое шаманство. видимо, исключает из списка полученных из выдачи ссылок forbidden_sites
  68.         print " <<< filtered : " , len(results_links)
  69.         return results_links
  70.  
  71.     @classmethod
  72.     def getHost(self):
  73.         return 'google.com'
  74.     def searchString(self):
  75.         return 'google.com'
  76.     def searchLinks(self, page):
  77.         return ""
  78.     def parseInfo(self, page):
  79.         return ""
Advertisement
Add Comment
Please, Sign In to add comment