Найти - Пользователи
Полная версия: Парсинг
Начало » Python для новичков » Парсинг
1 2
Pytonist
Подскажите пожалуйста люди добрые. Целый день сегодня потратил и толком даже не сдвинулся с места… Нужно сделать парсинг после выполнения которого, я получил два отсортированных списка. В первом списке должны быть все ссылки сервера даной страницы(внутренние). Второй список должен содержать все остальные ссылки на внешние источники.
Я так понимаю, сортировка дожна происходить по IP. Но как это реализовать? Раньше ничего подобного не делал. Какой-то вменяемой инфы не удалось найти. Вынужден обратится на форум.
Спасибо.
py.user.next
Нужно собрать все ссылки в один список, а потом разделить его.
afiskon
1) качаете страницу через urllib3
2) выдираете регулярными выражениями все урлы
3) для каждого урла - выдираете регулярным выражением домен. если домена нет или есть и это домен вашего сайта с точностью до www. в начале, кладете в список внутренних адресов. иначе в список внешних
4) сортируете списки

по каждому пункту за 5 минут гугления находится решение.

сортировка по IP не подходит так как на одном сервере может быть сотня совершенно не связанных друг с другом сайтов.
py.user.next
afiskon
2) выдираете регулярными выражениями все урлы
Ссылки могут быть и в комментариях, regexp их не различит.

afiskon
3) для каждого урла - выдираете регулярным выражением домен
В питоне есть urlsplit().

afiskon
кладете в список внутренних адресов. иначе в список внешних
При изменении условий (количество списков, которые нужны) придётся лезть в уже готовый код и менять его. Тогда как выделение всех ссылок и их подача на дальнейший разборщик упрощает задачу и отвязывает от источника ссылок.
Elaphe
А чем плохо использовать для выдирания ссылок htmlparser?
Это же намного проще, чем ломать голову с регулярными выражениями.
py.user.next
Elaphe
А чем плохо использовать для выдирания ссылок htmlparser?
В прежней версии парсер выпадал, когда встречал ошибки в html
https://docs.python.org/2/library/htmlparser.html
А ещё там надо было писать обработчики для всего, иначе, встретив charref, он тоже выпадал.

В новой версии допускается невалидный документ
https://docs.python.org/3/library/html.parser.html

>>> 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()
>>>

Но для разбора страниц используется xpath
lxml.html + xpath()
Pytonist
Всем отписавшимся большое спасибо, очень помогли. Свою задачу решил с помошью lxml.
snake_eater
lxml
а он умеет в невалидный html ?
doza_and
snake_eater
а он умеет в невалидный html ?
Да только наверное из а не в?
snake_eater
а рано обрадовался - это веть нестандартная либа.
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