Парсинг сайта - Python

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

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

Добрый день. Возникла проблема с написанием рекурсивного парсинга страниц сайта. Суть такова, написан код, который парсит только страницу, которую я указал. Помогите разобраться как реализовать, чтобы можно было извлечь абсолютно все ссылки с сайта
Листинг программы
  1. import requests
  2. from bs4 import BeautifulSoup, SoupStrainer
  3. from itertools import groupby
  4. class TRaCAse:
  5. url='http://corp.fastsite.ru/'
  6. file = open('links.txt', 'w')
  7. req = requests.get(url)
  8. soup = BeautifulSoup(req.content, 'html.parser', parse_only=SoupStrainer('a'))
  9. list_1= ([link['href'] for link in soup if link.has_attr('href')])
  10. list_1 = list(set(list_1))
  11. deleted = 0
  12. for i in range(len(list_1)):
  13. if "https" not in list_1[i - deleted] :
  14. if "http" not in list_1[i - deleted] :
  15. if "www" not in list_1[i - deleted] :
  16. del list_1[i - deleted]
  17. deleted += 1
  18. ##удаление повтор. ссылок
  19. new_t = [el for el, _ in groupby(list_1)]
  20. string_x = ''.join(str(e) + '\n' for e in new_t)
  21. file.write(string_x)
  22. file.close()

Решение задачи: «Парсинг сайта»

textual
Листинг программы
  1. url = 'http://corp.fastsite.ru/'
  2. resp = requests.get(url)
  3. tree = lxml.html.fromstring(resp.text)
  4.  
  5. xpath = './/a[(starts-with(@href,"http") or starts-with(@href,"https")) and contains(@href,"www")]/@href'
  6. links = set(tree.xpath(xpath)) # set удалит дубликаты
  7. print(links)
  8.  
  9. # или так
  10. links = tree.xpath('.//a[@href]/@href')
  11. links = set([href for href in links if re.match(r'(https?)://(?=www)',href)])
  12. print(links)

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


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

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

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

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

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

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