from HTMLParser import HTMLParser
import urllib
BASE_URL = 'http://python.su/'
class UrlFinder(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.links = []
def handle_starttag(self, tag, attrs):
attrs = dict(attrs)
if 'a' == tag:
try:
self.links.append(attrs['href'])
except:
pass
print "Getting url list..."
parser = UrlFinder()
parser.feed(urllib.urlopen(BASE_URL).read())
print "Founded", len(parser.links), "urls"
Naotaспасибо, именно такого ответа и ожидал
метод handle_starttag вызывается при обработки всех DOM сущностей
всех DOM сущностейНе знаю, всех ли, я только для тегов использовал.
готовое решение не интересно smileНет проблем :)
расскажи как оно работает. а то есть некоторые мысли, но что-то не допонимаю.
from HTMLParser import HTMLParser
import urllib
# урл к страничке, откуда будем тянуть ссылки
BASE_URL = 'http://python.su/'
class UrlFinder(HTMLParser):
''' Класс-наследник HTMLParser.
'''
def __init__(self):
HTMLParser.__init__(self)
self.links = []
def handle_starttag(self, tag, attrs):
''' Переопределяем метод HTMLParser (в базовом классе - метод ничего не делает)
Сам метод вызывается для обработки начала тега (фактически вызывается для каждого
начального тега при вызове метода "feed").
'''
attrs = dict(attrs)
# если находим тег 'a'
if 'a' == tag:
try:
# записываем значение аттрибута href в список-свойство links нашего класса
self.links.append(attrs['href'])
except:
pass
print "Getting url list..."
# создаём экземпляр класса UrlFinder()
parser = UrlFinder()
# вызываем метод feed, который передаёт текст в parser.
# Сам текст получаем по ссылке с помощью функций библиотеки urllib
parser.feed(urllib.urlopen(BASE_URL).read())
# теперь считаем количество найденных ссылок (просто подсчитывая количество элементов в links нашго экзепляра класса UrlFinder())
print "Founded ", len(parser.links), "urls"
parser = htmllib.HTMLParser()
parser.feed(urllib.urlopen(BASE_URL).read())
print len(parser.anchorlist)
#from HTMLParser import HTMLParser
import urllib
import htmllib
from formatter import NullFormatter
print "Getting url list..."
parser = htmllib.HTMLParser(NullFormatter())
parser.feed(urllib.urlopen('http://google.com').read())
print len(parser.anchorlist)
print parser.anchorlist
>>> import urllib2 >>> s=urllib2.urlopen('http://python.com.ua/forum/viewtopic.php?id=2264').read() >>> import re >>> o=re.compile('href="(.*?)"') >>> l=o.findall(s) >>> l[1] 'http://python.su/' >>> len(l) 56
import urllib2 >>> from BeautifulSoup import BeautifulSoup as BS >>> s=urllib2.urlopen('http://python.com.ua/forum/viewtopic.php?id=2264').read() >>> so=BS(s) >>> f=so.findAll('a') >>> for i in f: try: print i['href'] except: pass http://python.su/ index.php ... >>> len(f) 56