Уведомления

Группа в Telegram: присоединиться | Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Июль 7, 2007 23:30:35

guest01
От:
Зарегистрирован: 2007-03-24
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка localhost адресов

Привет!
Почти дописал свой простенький link checker. Совсем простенький. Смысл такой: натравливаем скрипт на папку с файлами сайта, он там находит все html файлы, выдирает из всех них теги <a href='…'> и проверяет что они не битые. Т.е. что то показывают. С адресами по протоколам все просто. Мы опрашиваем через urllib каждый адрес и ловим исключение в случае невалидного адреса хоста. Основная проблема - это как проверять localhost ссылки, ну т.е. типа таких: href='../page.html' или href='../../page.html', или еще href='common/page.html'. Я было подумал, что стоит проверять просто на существование файлов и директорий методом os.access(). Но ведь одинаково названные файлы могут просто находиться в разных папках… И что тогда?
Мысли есть?



Офлайн

#2 Июль 8, 2007 01:16:48

tabajara
От:
Зарегистрирован: 2007-01-02
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка localhost адресов

скрипт spider.py - працює не коректно, але працює. Я не розумію до чого тут слово localhost. Мені знається воно не є синонімом ‘' відносний шлях’'



Офлайн

#3 Июль 8, 2007 09:41:37

guest01
От:
Зарегистрирован: 2007-03-24
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка localhost адресов

lorien
При путешествии по дереву сайтов вы знаете на каком уровне вложенности находитесь, так в чём проблема, подняться на столько уровней, сколько “..” в относительном пути и проверить в этом каталоге наличие нужного файла?
Да можно конечно. Просто мне казалось что это будет неправильно. Попробую.



Офлайн

#4 Июль 8, 2007 09:43:13

guest01
От:
Зарегистрирован: 2007-03-24
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка localhost адресов

tabajara
скрипт spider.py - працює не коректно, але працює. Я не розумію до чого тут слово localhost. Мені знається воно не є синонімом ‘' відносний шлях’'
Не знал как их обозвать и придумал такую ерунду. Главное - все поняли.



Офлайн

#5 Июль 9, 2007 09:10:38

guest01
От:
Зарегистрирован: 2007-03-24
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка localhost адресов

Привет всем! Чтобы тема не застоялась напишу свое решения проверки относительных путей и не только. Если у кого будет лучшее решение (а оно будет, тут я иллюзий не питаю), то смело пишите. Или критикуйте. Спасибо.

 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.'



Офлайн

#6 Июль 9, 2007 10:26:38

guest01
От:
Зарегистрирован: 2007-03-24
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка localhost адресов

У меня такой вопрос возник. Для проверки, что url валидный (существует) лучше использовать urllib или urllib2?



Отредактировано (Июль 9, 2007 10:54:40)

Офлайн

#7 Июль 9, 2007 10:46:37

guest01
От:
Зарегистрирован: 2007-03-24
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка localhost адресов

Продолжу разговор сам с собой. В итоге я решил оставить функцию проверки 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



Офлайн

#8 Июль 10, 2007 13:57:16

guest01
От:
Зарегистрирован: 2007-03-24
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка localhost адресов

Здорово было бы сделать проверку корректности относительных ссылок для Линукса. Ведь там чувствительность к регистру. Есть идеи? Я это почти написал, но получается какой то монстр.



Офлайн

#9 Июль 10, 2007 15:07:55

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка localhost адресов

guest01
Здорово было бы сделать проверку корректности относительных ссылок для Линукса.
Ты хочешь проверить существует ли файл на который указывает ссылка, я правильно понял?



Офлайн

#10 Июль 10, 2007 15:27:18

guest01
От:
Зарегистрирован: 2007-03-24
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка localhost адресов

slivlen
guest01
Здорово было бы сделать проверку корректности относительных ссылок для Линукса.
Ты хочешь проверить существует ли файл на который указывает ссылка, я правильно понял?
Нет. Это дело я проверяю методом os.access. После того как установленно, что он существует, необходимо проверить, что путь указанный в ссылке абсолютно идентичен реальному пути, т.е. все должно быть набрано до совпадения в регистре. Иначе Линукс не поймет такого безобразия.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version