Найти - Пользователи
Полная версия: Проверка localhost адресов
Начало » Python для экспертов » Проверка localhost адресов
1 2
guest01
Привет!
Почти дописал свой простенький link checker. Совсем простенький. Смысл такой: натравливаем скрипт на папку с файлами сайта, он там находит все html файлы, выдирает из всех них теги <a href='…'> и проверяет что они не битые. Т.е. что то показывают. С адресами по протоколам все просто. Мы опрашиваем через urllib каждый адрес и ловим исключение в случае невалидного адреса хоста. Основная проблема - это как проверять localhost ссылки, ну т.е. типа таких: href='../page.html' или href='../../page.html', или еще href='common/page.html'. Я было подумал, что стоит проверять просто на существование файлов и директорий методом os.access(). Но ведь одинаково названные файлы могут просто находиться в разных папках… И что тогда?
Мысли есть?
tabajara
скрипт spider.py - працює не коректно, але працює. Я не розумію до чого тут слово localhost. Мені знається воно не є синонімом ‘' відносний шлях’'
guest01
lorien
При путешествии по дереву сайтов вы знаете на каком уровне вложенности находитесь, так в чём проблема, подняться на столько уровней, сколько “..” в относительном пути и проверить в этом каталоге наличие нужного файла?
Да можно конечно. Просто мне казалось что это будет неправильно. Попробую.
guest01
tabajara
скрипт spider.py - працює не коректно, але працює. Я не розумію до чого тут слово localhost. Мені знається воно не є синонімом ‘' відносний шлях’'
Не знал как их обозвать и придумал такую ерунду. Главное - все поняли.
guest01
Привет всем! Чтобы тема не застоялась напишу свое решения проверки относительных путей и не только. Если у кого будет лучшее решение (а оно будет, тут я иллюзий не питаю), то смело пишите. Или критикуйте. Спасибо.
 def check(_dict): # _dict example: _dict['C:\LinkChecker\pv_act\common\page.htm'] = ['../page2.html','http://www.somefoo.com']
    for k, v in _dict.iteritems():
        print 'File name %s' % k
        for href in v:
            if truth(re.search('http://', href)) or truth(re.search('https://', href)):
                state = 'Unknown url.'
                if href.startswith('http'):
                    state = 'Connection is failed. Check url.'
                    if valid_http(href):
                        state = 'Ok. I find it.'   
            else:
                state = "File doesn't exist."
                if not href.startswith('../'):
                    if access(k[:k.rindex('\\')+1]+href, F_OK):
                        state = "File exist."
                else:
                    count = href.count('../') # example: href='../../page.htm' -> count = 2
                    root = k[:k.rindex('\\')] # example: k='C:\LinkChecker\pv_act\common\page.htm'-> root = 'C:\LinkChecker\pv_act\common'
                    temp = '\\'.join(root.split('\\')[:-count])
                    if access(temp+'\\'+href.rsplit('../')[-1], F_OK):
                        state = 'File exist.'
guest01
У меня такой вопрос возник. Для проверки, что url валидный (существует) лучше использовать urllib или urllib2?
guest01
Продолжу разговор сам с собой. В итоге я решил оставить функцию проверки url в таком виде:
def valid_http(url):
try:
connect = urllib2.urlopen(url)
return 1
except urllib2.URLError, e:
if hasattr(e, 'reason'):
print 'We failed to reach a server: ', url
print 'Reason: ', e.reason
return 0
elif hasattr(e, 'code'):
print 'The server ', url,' couldn\'t fulfill the request.'
print 'Error code: ', e.code
return 0
guest01
Здорово было бы сделать проверку корректности относительных ссылок для Линукса. Ведь там чувствительность к регистру. Есть идеи? Я это почти написал, но получается какой то монстр.
slivlen
guest01
Здорово было бы сделать проверку корректности относительных ссылок для Линукса.
Ты хочешь проверить существует ли файл на который указывает ссылка, я правильно понял?
guest01
slivlen
guest01
Здорово было бы сделать проверку корректности относительных ссылок для Линукса.
Ты хочешь проверить существует ли файл на который указывает ссылка, я правильно понял?
Нет. Это дело я проверяю методом os.access. После того как установленно, что он существует, необходимо проверить, что путь указанный в ссылке абсолютно идентичен реальному пути, т.е. все должно быть набрано до совпадения в регистре. Иначе Линукс не поймет такого безобразия.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB