Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 3, 2010 10:09:12

toksin
От:
Зарегистрирован: 2010-09-09
Сообщения: 31
Репутация: +  -1  -
Профиль   Отправить e-mail  

Parser google

Написал простенький парсер гугля, может кому пригодится.

#!/usr/bin/env python
# -*- coding: ascii -*-
#
# autor: Nikolay aka toksin
# radiotoksin@gmail.com
# http://illusory-planet.blogspot.com/

import urllib
import threading
import re
import time
from urllib import FancyURLopener

#for send correct header
class MyOpener(FancyURLopener):
version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11'


#class request in google
class GoogleReq():

def __init__(self):
self.req = 'http://www.google.com.ua/search?q='

#search by site or domain
def g_site(self, site):
self.req = self.req + 'site:' + site + '+'

#search by file type
def g_filetype(self, ftype):
self.req = self.req + 'filetype:' + ftype + '+'

#returns formed querystring
def get_str(self, pages=1): #pages equal to the number of pages
result = []
result.append(self.req[:-1] + '&client=firefox')
try:
if int(pages) and pages>1:
for i in range(1,pages+1):
result.append(self.req[:-1] + '&start=' + str(i*10) + '&client=firefox')
except Exception, err:
print err
return result

#private method parse links in the results of a query in Google
def _regex(self, content):
m = re.findall(r'<h3\sclass="r"><a\shref\=\"(http://\S*)\"\sclass=', content)
if m:
return m

#executes a query on Google, parses the links and returns them
def exec_req(self, listurl):
allurl = []
for page_url in listurl:
try:
myopener = MyOpener()
content = myopener.open(page_url).read()
allurl += self._regex(content)
except Exception, err:
print err
return allurl

#phrase search
SEARCH = 'user'

#class creates streams for parsing pages
class Parser(threading.Thread):

def __init__(self, url):
self.url = url
threading.Thread.__init__(self)

def _parse(self):
try:
content = urllib.urlopen(self.url).read()
#code to find specific information on the site
if SEARCH in content:
print self.url
except Exception, err:
print err

#start thread
def run(self):
self._parse()


def main():
req_str = GoogleReq()
req_str.g_site('ua')
req_str.g_filetype('log')
request = req_str.get_str(1)
res = []
if request:
res += req_str.exec_req(request)
i = 0
for link in res:
i += 1
if i % 10 == 0:
time.sleep(1)
Parser(link).start()


if __name__ == "__main__":
main()
Класс GoogleReq - формирует строку запроса, его можно расширить под любые нужды. Данный парсер ищет строку(указывается в переменной SEARCH) в результатах запроса к гугл и если находит, то возвращает ссылку на url, который содержит данную строку.



Офлайн

#2 Ноя. 3, 2010 11:47:15

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Parser google

Если это кому-то пригодилось, то не поленитесь посмотреть и это: http://code.activestate.com/recipes/577420-robot-pager-search-engines-and-others/



Офлайн

#3 Ноя. 3, 2010 16:22:37

toksin
От:
Зарегистрирован: 2010-09-09
Сообщения: 31
Репутация: +  -1  -
Профиль   Отправить e-mail  

Parser google

pyuser
Если это кому-то пригодилось, то не поленитесь посмотреть и это: http://code.activestate.com/recipes/577 … nd-others/
Если я не ошибаюсь, то этот скрипт парсит немного не то, что мой. Мой рассчитан на запросы типа site:com filetype:txt т.е. он парсит содержимое файлов, расположенных на серверах. Можно искать определенные файлы с нужным содержимым.



Офлайн

#4 Янв. 15, 2011 10:24:19

xa4a
От:
Зарегистрирован: 2008-05-28
Сообщения: 12
Репутация: +  1  -
Профиль   Отправить e-mail  

Parser google

Ваш код нарушает ToS гугла. Почему бы для этой задачи не использовать специальный API вместо горожения регекспов?



Офлайн

#5 Янв. 15, 2011 11:37:02

toksin
От:
Зарегистрирован: 2010-09-09
Сообщения: 31
Репутация: +  -1  -
Профиль   Отправить e-mail  

Parser google

xa4a
Почему бы для этой задачи не использовать специальный API вместо горожения регекспов?
Я только учусь, поэтому еще много чего не знаю.



Офлайн

#6 Янв. 15, 2011 17:26:52

xa4a
От:
Зарегистрирован: 2008-05-28
Сообщения: 12
Репутация: +  1  -
Профиль   Отправить e-mail  

Parser google

Офлайн

#7 Янв. 15, 2011 18:00:27

toksin
От:
Зарегистрирован: 2010-09-09
Сообщения: 31
Репутация: +  -1  -
Профиль   Отправить e-mail  

Parser google

:) Спасибо, меня вот в данный момент интересует цифровая обработка сигналов в python3, для начало хочу написать декодер азбуки морзе записанной в wav файл, прочитать файл могу, а вот как фильтры написать и вытянуть точки тере со скоростью манипуляции в несколько знаков в секунду - это пока загадка, в поисках набрел на это http://dabeaz.blogspot.com/2010/08/using-python-to-encode-cassette.html , но нужно будет разобраться с кодом, да и мой англ., очень и очень плох.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version