Рекурсивный парсинг URL адресов из sitemap.xml на Python

Дело было вечером, делать было нечего…

К сожалению, на PHP нет нормальной многопоточности, поэтому быстро накатал рекурсивный парсинг страниц сайта из XML карты по заданному списку доменов на Python.

Скрипт сам ищет карту сайта и парсит ее, включая вложенные карты сайте, если они есть.

Создайте файл domains.txt со списком доменов. Каждый с новой строки. И запустите скрипт.

В папке url будут сохранены списки URL страниц в файлах с именем домена.

В файле bad_domains.txt — список доменов, по которым не удалось получить карту сайта.

Ссылка на блокнот: здесь

Сам код скрипта:

#install requred modules
!pip install ultimate-sitemap-parser

import threading, os
from usp.tree import sitemap_tree_for_homepage

os.mkdir('urls')
bad_domains = []

def parse_sitemap(domain):
  domain = domain.strip()
  url = f'http://{domain}/'
  sitemap = sitemap_tree_for_homepage(url)
  urls = {page.url for page in sitemap.all_pages()}
  urls = list(urls)
  if len(urls) > 0:
    with open("urls/" + domain+".txt", "w") as d:
      d.write("\n".join(urls))
  else:
    bad_domains.append(domain)

th = []
with open("domains.txt") as domains:
  for domain in domains:
    thread = threading.Thread(target=parse_sitemap, args=(domain, ))
    th.append(thread)
    thread.start()

for t in th:
  t.join()

if len(bad_domains) > 0:
  with open("bad_domains.txt", "w") as bdmns:
    bdmns.write("\n".join(bad_domains))
  

Так же исходник с GIT.

Добавить комментарий

Ваш адрес email не будет опубликован.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.