Форум сайта python.su
Написал простенький парсер гугля, может кому пригодится.
#!/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()
Офлайн
Если это кому-то пригодилось, то не поленитесь посмотреть и это: http://code.activestate.com/recipes/577420-robot-pager-search-engines-and-others/
Офлайн
pyuserЕсли я не ошибаюсь, то этот скрипт парсит немного не то, что мой. Мой рассчитан на запросы типа site:com filetype:txt т.е. он парсит содержимое файлов, расположенных на серверах. Можно искать определенные файлы с нужным содержимым.
Если это кому-то пригодилось, то не поленитесь посмотреть и это: http://code.activestate.com/recipes/577 … nd-others/
Офлайн
Ваш код нарушает ToS гугла. Почему бы для этой задачи не использовать специальный API вместо горожения регекспов?
Офлайн
xa4aЯ только учусь, поэтому еще много чего не знаю.
Почему бы для этой задачи не использовать специальный API вместо горожения регекспов?
Офлайн
черпайте вдохновения: https://bitbucket.org/xa4a/xapy/src/8ff39c7f4377/processors/googleProc.py
Офлайн
:) Спасибо, меня вот в данный момент интересует цифровая обработка сигналов в python3, для начало хочу написать декодер азбуки морзе записанной в wav файл, прочитать файл могу, а вот как фильтры написать и вытянуть точки тере со скоростью манипуляции в несколько знаков в секунду - это пока загадка, в поисках набрел на это http://dabeaz.blogspot.com/2010/08/using-python-to-encode-cassette.html , но нужно будет разобраться с кодом, да и мой англ., очень и очень плох.
Офлайн