Python 获取域名下所有页面地址

1. 流程概述

下面是获取域名下所有页面地址的整体流程,通过以下步骤可以实现该功能。

步骤 描述
步骤一 输入域名,获取域名下的所有网页链接
步骤二 遍历所有网页链接,获取每个网页中的所有链接
步骤三 将所有链接保存到一个列表中
步骤四 去除重复的链接
步骤五 输出所有页面地址

2. 详细步骤

步骤一:获取域名下的所有网页链接

在 Python 中,我们可以使用 requests 库来发送 HTTP 请求,并使用 BeautifulSoup 库来解析 HTML。

import requests
from bs4 import BeautifulSoup

def get_links(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.text, "html.parser")
    links = []
    for link in soup.find_all("a"):
        href = link.get("href")
        links.append(href)
    return links

在这段代码中,我们定义了一个名为 get_links 的函数,它接受一个 URL 作为参数。首先,我们使用 requests.get 方法发送 HTTP 请求,并将响应内容保存在 response 变量中。然后,我们使用 BeautifulSoup 解析 HTML,并使用 find_all 方法找到页面中所有的链接。最后,我们遍历这些链接,并将它们添加到 links 列表中。

步骤二:获取每个网页中的所有链接

def get_all_links(domain):
    visited = set()
    all_links = []

    def crawl(url):
        if url in visited:
            return
        visited.add(url)
        links = get_links(url)
        all_links.extend(links)
        for link in links:
            crawl(link)

    crawl(domain)
    return all_links

在这段代码中,我们定义了一个名为 get_all_links 的函数,它接受一个域名作为参数。我们使用了一个递归函数 crawl 来遍历所有链接。首先,我们检查当前链接是否已经访问过,如果是,则返回。然后,我们将当前链接添加到已访问的集合中,并获取当前链接中的所有链接。接下来,我们将这些链接添加到 all_links 列表中,并对每个链接递归调用 crawl 函数。

步骤三:保存链接到一个列表中

def save_links_to_file(links, filename):
    with open(filename, "w") as f:
        for link in links:
            f.write(link + "\n")

在这段代码中,我们定义了一个名为 save_links_to_file 的函数,它接受一个链接列表和一个文件名作为参数。我们使用 with open 语句打开文件,并将链接逐行写入文件中。

步骤四:去除重复的链接

def remove_duplicates(links):
    return list(set(links))

在这段代码中,我们定义了一个名为 remove_duplicates 的函数,它接受一个链接列表作为参数。我们使用 set 数据结构来去除重复的链接,并将其转换回列表。

步骤五:输出所有页面地址

def print_links(links):
    for link in links:
        print(link)

在这段代码中,我们定义了一个名为 print_links 的函数,它接受一个链接列表作为参数。我们使用 for 循环遍历链接列表,并将每个链接打印出来。

3. 甘特图

下面是一个基于 Mermaid 语法的甘特图,用于可视化整个流程。

gantt
    title 获取域名下所有页面地址

    section 步骤一
    输入域名: 0, 1

    section 步骤二
    遍历所有网页链接: 2, 4

    section 步骤三
    保存链接到列表: 5, 6

    section 步骤四
    去除重复链接: 7, 7

    section 步骤五
    输出所有页面地址: 8, 8