хранение ссылок сайта в дереве - PullRequest
1 голос
/ 07 сентября 2010

Я пытаюсь сохранить ссылки, которые я вычищаю с сайта, в недвоичном дереве. Ссылки выложены иерархически (очевидно). Вопрос в том, как мне сгенерировать дерево? Я имею в виду, как мне пройтись по страницам, предоставленным ссылкой, чтобы я знал, кто есть кто, чей ребенок.

Пока я могу получить ссылки первого и второго уровня, но понятия не имею, как идти отсюда, кроме того, что мне приходится рекурсивно строить его и иметь возможность остановиться, когда я доберусь до листа У меня есть).

То, о чем я думал, было что-то вроде (код на Python):

def buildTree(root):
for node in root.children:
    if <end condition here>:
        continue
    else:
        nodes = getNodes(urllib2.urlopen(node.url).read())
        node.addChildren(nodes)
        buildTree(node)

где корень и узлы определяются пользователем Узел класс

1 Ответ

1 голос
/ 07 сентября 2010

Очевидно, что ссылки на сайте - это не дерево, а график . У вас должен быть объект Page, который идентифицируется URL-адресом, и объект Link, который указывает с одной страницы на другую (и страница A может указывать на страницу B, а страница B указывает на страницу A, делая ее графом, вместо дерева).

Алгоритм сканирования псевдокода:

process_page(current_page):
    for each link on the current_page: 
    if target_page is not already in your graph:
        create a Page object to represent target_page
        add it to to_be_scanned set
    add a link from current_page to target_page

scan_website(start_page)
    create Page object for start_page
    to_be_scanned = set(start_page)
    while to_be_scanned is not empty:
        current_page = to_be_scanned.pop()
        process_page(current_page)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...