usr bin python coding utf-8 Парсинг import urllib urllib2 def main pr

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
#!/usr/bin/python
# -*- coding: utf-8 -*-
''' Парсинг '''
import urllib, urllib2
def main():
pr= '87.118.122.166:6654'
res= Google(pr, 0, pr)
print 'Number of pages: ', res.num_pages
for r in res.results:
print r.url
print r.ancor
print r.desc
print
def Google(query, page_num=0, proxy=''):
''' Парсим страницу Гугла
In:
query - запрос
page - страница
proxy - прокси
Out(object):
object:
num_pages - количество страниц выдачи по запросу
num_res - количество результатов
results(object):
url
ancor
desc
'''
t_url= "http://www.google.com/search?hl=en&rls=en"
data = {"q": query, "start": page_num*10}
enc_data = urllib.urlencode(data)
url = t_url + "&" + enc_data
# использование прокси
req = urllib2.Request(url)
req.add_header('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3')
if proxy:
req.set_proxy(proxy, 'http')
try:
page = urllib2.urlopen(req).read()
except (urllib2.HTTPError, urllib2.URLError), e:
#~ logging.debug('om_prs.Google(%s, %s, %s): %s' % (query, page_num, proxy, e))
return -1
#~ page= open('g.htm').read()
if page.count('</b> - did not match any documents.'):
# нет выдачи
return 0
class Ret: pass # класс возвращаемой страницы
ret= Ret()
class Res: pass # класс одного результата поиска
# получаем количество страниц
ret.num_pages= page.count('<span class="csb"') + 1
# получаем количество результатов
if page.count('Results <b>1</b> - <b>10</b> of about <b>'):
ret.num_res= page.split('Results <b>1</b> - <b>10</b> of about <b>')[1].split('</b>')[0]
elif page.count('</b> of <b>'):
ret.num_res= page.split('</b> of <b>')[1].split('</b> from <b>')[0]
else:
ret.num_res= 'parse error'
# отбрасываем лишние части
page= page.split('<h2 class=hd>Search Results</h2>')[1].split('<br clear="all"/>')[0]
# обрабатываем результат выдачи
ret.results= []
for bl in page.split('<h3 class=r><a href="')[1:]:
res= Res()
# получаем сслыку
res.url= bl.split('"')[0]
# получаем анкор
res.ancor= bl.split('>')[1].split('<')[0].strip()
# получаем описание
d= bl.split('<div class="s">')
if len(d) == 1:
# дополнительный результат
d= bl.split('<div class="s hc">')
res.desc= d[1].split('<br><cite>')[0].strip()
ret.results.append(res)
return ret
if __name__ == "__main__":
main()