Удалить ссылки в html - Python

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток! Поставлена задача: Найти на web-странице (на wiki-движке) ключевые слова и построить dot-дерево. На данный момент я считала со страницы текст при помощи библиотеки request и нашла ключевые слова при помощи библиотеки rutermextract. Но помимо текста у меня выводятся ссылки виде последовательностей символов и rutermextract определяет их как ключевые слова. Подскажите пожалуйста, как можно от них избавиться?
Листинг программы
  1. import urllib.request
  2. from rutermextract import TermExtractor
  3. term_extractor = TermExtractor()
  4. #url, на котором ищем ключевые слова
  5. link = urllib.request.urlopen('http://itas.pstu.ru')
  6. lines = []
  7. for line in link.readlines():
  8. #взяли все строки с сотрудниками
  9. if line.find(b'<p>') != -1 and line.find(b'a href'):
  10. lines.append(line)
  11. link.close()
  12. #----------------Видимо, тут нужен перевод в html дерево----------------#
  13. #Переводим bytes в str
  14. for i in range(len(lines)):
  15. lines[i] = lines[i].decode('utf-8')
  16. #Можно работать как с обычной строкой
  17. for i in range(len(lines)):
  18. #Убираем все лишнее
  19. lines[i] = lines[i].replace('\t\t\t<li>', '')
  20. lines[i] = lines[i].replace('\"', '')
  21. lines[i] = lines[i].replace('<a href=', '')
  22. lines[i] = lines[i].replace('target=_blank>', '')
  23. lines[i] = lines[i].replace('</a></li>', '')
  24. lines[i] = lines[i].replace('</ul>', '')
  25. lines[i] = lines[i].replace("\r\n", '')
  26. lines[i] = lines[i].replace('<p>', '')
  27. lines[i] = lines[i].replace('</p>', '')
  28. lines[i] = lines[i].replace('<br />', '')
  29. lines[i] = lines[i].replace('</a>', '')
  30. lines[i] = lines[i].replace('title', '')
  31. lines[i] = lines[i].replace('</>', '')
  32. lines[i] = lines[i].replace('%A4%D0%B0%D0%B9%D0%B7%D1%80%D0%B0%D1%85%D0%BC%D0%B0%D0%BD%D0%BE%D0%B2_%D0%A0%D1%83%D1%81%D1%82%D0%B0%D0%BC_%D0%90%D0%B1%D1%83%D0%B1%D0%B0%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%B8%D1%87 =', '')
  33. lines[i] = lines[i].replace('%D0%A8%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D1%82%D1%8C%D0%B5%D0%B2_%D0%92%D0%BB%D0%B0%D0%B4%D0%B8%D0%BC%D0%B8%D1%80_%D0%93%D0%B5%D0%BD%D0%BD%D0%B0%D0%B4%D1%8C%D0%B5%D0%B2%D0%B8%D1%87 =', '')
  34. lines[i] = lines[i].replace('%D0%9F%D0%BE%D0%B3%D1%83%D0%B4%D0%B8%D0%BD_%D0%90%D0%BD%D0%B4%D1%80%D0%B5%D0%B9_%D0%9B%D0%B5%D0%BE%D0%BD%D0%B8%D0%B4%D0%BE%D0%B2%D0%B8%D1%87 =', '')
  35. lines[i] = lines[i].replace('/wiki/index.php/', '')
  36.  
  37. for i in range(len(lines)):
  38. print (lines[i])
  39. #Извлекаем ключевые слова
  40. for i in range(len(lines)):
  41. text = lines[i]
  42. for term in term_extractor(text):
  43. print (term.normalized, term.count)
Здесь я принудительно убираю все лишнее, но если с тегами это можно сделать, то с ссылками это работает только на конкретной странице (дальше мне нужно будет по ключевым словам переходить на другие и искать ключевые слова там), мне нужен более универсальны способ.

Решение задачи: «Удалить ссылки в html»

textual
Листинг программы
  1. import requests
  2. from lxml.html import fromstring
  3. import re
  4. #--------------------------------------
  5. # замена множественных пробелов на один
  6. #--------------------------------------    
  7. def squeeze(value):
  8.     """Replace all sequences of whitespace chars with a single space."""
  9.     return re.sub(r"[\x00-\x20]+", " ", value).strip()
  10.  
  11. if __name__ == "__main__":
  12.     url = "http://itas.pstu.ru"
  13.  
  14.     resp = requests.get(url)
  15.     # дерево элементов
  16.     tree = fromstring(resp.text)
  17.     # выбираем только нужный элемент и рекурсивно конкатенируем все текстовое содержимое его дочерних узлов
  18.     data = tree.xpath("//div[@id='content']")[0].text_content()
  19.     data = squeeze(data) # убираем лишние пробелы
  20.     # в конец текста попадает одна ссылка - «http://itas.pstu.ru/wiki/index.php?title=Новости_кафедры&oldid=1114»
  21.     # ошибка верстки? - но ее можно легко удалить
  22.     data = re.sub(r"«http:.+?»",'',data)
  23.     print(data)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут