Найти - Пользователи
Полная версия: Parser google
Начало » Python проекты » Parser google
1
toksin
Написал простенький парсер гугля, может кому пригодится.
#!/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, который содержит данную строку.
pyuser
Если это кому-то пригодилось, то не поленитесь посмотреть и это: http://code.activestate.com/recipes/577420-robot-pager-search-engines-and-others/
toksin
pyuser
Если это кому-то пригодилось, то не поленитесь посмотреть и это: http://code.activestate.com/recipes/577 … nd-others/
Если я не ошибаюсь, то этот скрипт парсит немного не то, что мой. Мой рассчитан на запросы типа site:com filetype:txt т.е. он парсит содержимое файлов, расположенных на серверах. Можно искать определенные файлы с нужным содержимым.
xa4a
Ваш код нарушает ToS гугла. Почему бы для этой задачи не использовать специальный API вместо горожения регекспов?
toksin
xa4a
Почему бы для этой задачи не использовать специальный API вместо горожения регекспов?
Я только учусь, поэтому еще много чего не знаю.
xa4a
черпайте вдохновения: https://bitbucket.org/xa4a/xapy/src/8ff39c7f4377/processors/googleProc.py
toksin
:) Спасибо, меня вот в данный момент интересует цифровая обработка сигналов в python3, для начало хочу написать декодер азбуки морзе записанной в wav файл, прочитать файл могу, а вот как фильтры написать и вытянуть точки тере со скоростью манипуляции в несколько знаков в секунду - это пока загадка, в поисках набрел на это http://dabeaz.blogspot.com/2010/08/using-python-to-encode-cassette.html , но нужно будет разобраться с кодом, да и мой англ., очень и очень плох.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB