如何获取与特定模式匹配的网站的所有现有 URL 的列表?

问题描述 投票:0回答:1

我正在尝试分析具有特定路径的网站的所有现有 URL。为了在示例中进行演示,URL 模式如下:

https://www.example.com/users/john

我正在尝试获取以“https://www.example.com/users/”开头的现有 URL 列表。

所以期望的输出将是这样的:

https://www.example.com/users/john
https://www.example.com/users/alice
https://www.example.com/users/bob
https://www.example.com/users/jeff
https://www.example.com/users/sarah
...

没有站点地图。我如何获得这样的列表?

web-crawler google-crawlers
1个回答
0
投票

要在没有站点地图的情况下生成遵循特定模式的现有 URL 列表,您可以使用网络抓取技术。以下是使用 Python 和 BeautifulSoup 库的一般方法:

向网站发送 HTTP 请求并检索其 HTML 内容。 解析 HTML 内容以提取与所需模式匹配的 URL。 将提取的 URL 存储在列表中。 下面是演示此方法的示例 Python 代码:

import requests
from bs4 import BeautifulSoup
import re

base_url = "https://www.example.com/users/"
pattern = re.compile(r'^https://www.example.com/users/.*$')

def extract_urls(url):
    try:
        response = requests.get(url)
        soup = BeautifulSoup(response.text, 'html.parser')
        urls = [a['href'] for a in soup.find_all('a', href=True) if pattern.match(a['href'])]
        return urls
    except Exception as e:
        print(f"Error fetching URL {url}: {e}")
        return []

def get_all_urls(base_url):
    all_urls = [base_url]
    queue = [base_url]

    while queue:
        current_url = queue.pop(0)
        extracted_urls = extract_urls(current_url)
        for url in extracted_urls:
            if url not in all_urls:
                all_urls.append(url)
                queue.append(url)

    return all_urls

if __name__ == "__main__":
    all_urls = get_all_urls(base_url)
    for url in all_urls:
        print(url)

将“https://www.example.com/users/”替换为您要抓取的网站的实际基本 URL。该脚本将从基本 URL 开始递归地爬行整个网站,并提取与指定模式匹配的所有 URL。然后它会打印出找到的 URL 列表。

© www.soinside.com 2019 - 2024. All rights reserved.