Проанализировать страницу и подсчитать количество внутренних и внешних ссылок. Ну и самы ссылки получить в виде удобном для дальнейшей работы.
Код:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib
import urlparse
import lxml.html
import chardet
import argparse
import sys
args_parser = argparse.ArgumentParser(description='Parses url and calculates external and internal links')
args_parser.add_argument('url', metavar='URL', type=str, help='Provide an url')
args = args_parser.parse_args()
class Url():
pass
class Parser():
def __init__(self, url):
self.url = url
self.domain = urlparse.urlparse(url).netloc
html = urllib.urlopen(url).read()
self.html_encoding = chardet.detect(html)['encoding']
self.html = lxml.html.document_fromstring(html)
def parse(self):
links_external = []
links_internal = []
for item in self.html.cssselect('a'):
if item.get('href') != None:
item_url = urllib.unquote(item.get('href'))
item_domain = urlparse.urlparse(item_url).netloc
urlo = Url()
if item.text and item.text.strip():
name = item.text
else:
name = u'Нет имени'
urlo.name = name
urlo.url = item_url
if not (item_domain == '' or item_domain.endswith(self.domain)):
links_external.append(urlo)
else:
links_internal.append(urlo)
return {'links_internal': links_internal, 'links_external': links_external}
parser = Parser(args.url)
result = parser.parse()
print u'Всего ссылок: %s, из них внешних: %s' % (len(result['links_external']) + len(result['links_internal']), len(result['links_external']))
print '-----------------------'
for item in result['links_internal'][:5]:
if type(item.url).__name__ == 'str':
item.url = item.url.decode(parser.html_encoding)
if type(item.name).__name__ == 'str':
item.name = item.name.decode(parser.html_encoding)
print u"%s %s" % (item.name, item.url)
print '-----------------------'
for item in result['links_external'][:5]:
if type(item.url).__name__ == 'str':
item.url = item.url.decode(parser.html_encoding)
if type(item.name).__name__ == 'str':
item.name = item.name.decode(parser.html_encoding)
print "%s %s" % (item.name.encode('utf-8'), item.url.encode('utf-8'))
print '-----------------------'