我正在尝试分析具有特定路径的网站的所有现有 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
...
没有站点地图。我如何获得这样的列表?
要在没有站点地图的情况下生成遵循特定模式的现有 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 列表。