Форум сайта python.su
1
Подскажите пожалуйста люди добрые. Целый день сегодня потратил и толком даже не сдвинулся с места… Нужно сделать парсинг после выполнения которого, я получил два отсортированных списка. В первом списке должны быть все ссылки сервера даной страницы(внутренние). Второй список должен содержать все остальные ссылки на внешние источники.
Я так понимаю, сортировка дожна происходить по IP. Но как это реализовать? Раньше ничего подобного не делал. Какой-то вменяемой инфы не удалось найти. Вынужден обратится на форум.
Спасибо.
Офлайн
857
Нужно собрать все ссылки в один список, а потом разделить его.
Офлайн
1) качаете страницу через urllib3
2) выдираете регулярными выражениями все урлы
3) для каждого урла - выдираете регулярным выражением домен. если домена нет или есть и это домен вашего сайта с точностью до www. в начале, кладете в список внутренних адресов. иначе в список внешних
4) сортируете списки
по каждому пункту за 5 минут гугления находится решение.
сортировка по IP не подходит так как на одном сервере может быть сотня совершенно не связанных друг с другом сайтов.
Офлайн
857
afiskonСсылки могут быть и в комментариях, regexp их не различит.
2) выдираете регулярными выражениями все урлы
afiskonВ питоне есть urlsplit().
3) для каждого урла - выдираете регулярным выражением домен
afiskonПри изменении условий (количество списков, которые нужны) придётся лезть в уже готовый код и менять его. Тогда как выделение всех ссылок и их подача на дальнейший разборщик упрощает задачу и отвязывает от источника ссылок.
кладете в список внутренних адресов. иначе в список внешних
Офлайн
5
А чем плохо использовать для выдирания ссылок htmlparser?
Это же намного проще, чем ломать голову с регулярными выражениями.
Отредактировано Elaphe (Ноя. 6, 2015 13:31:29)
Офлайн
857
ElapheВ прежней версии парсер выпадал, когда встречал ошибки в html
А чем плохо использовать для выдирания ссылок htmlparser?
>>> from html.parser import HTMLParser >>> >>> class Parser(HTMLParser): ... ... def handle_starttag(self, tag, attrs): ... if tag == 'a': ... print(dict(attrs)['href']) ... >>> parser = Parser() >>> parser.feed('<html><a href="x">abc</a><a href="y">abc</html>') x y >>> parser.close() >>>
Отредактировано py.user.next (Ноя. 7, 2015 00:47:57)
Офлайн
1
Всем отписавшимся большое спасибо, очень помогли. Свою задачу решил с помошью lxml.
Офлайн
0
lxml
Офлайн
253
snake_eaterДа только наверное из а не в?
а он умеет в невалидный html ?
Отредактировано doza_and (Ноя. 14, 2015 15:35:48)
Офлайн
0
а рано обрадовался - это веть нестандартная либа.
Офлайн