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