You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python/Scrapy新手求助:如何基于域名匹配从两列表创建多值字典

解决URL域名分组的Python实现方案

嘿,作为刚接触Python和Scrapy的新手,这种按域名分组的需求确实容易让人懵,我来给你一步步拆解怎么实现~

核心思路

我们要把列表b里的每个URL,匹配到列表a中对应的根域名下,最终生成一个键为根域名、值为对应URL列表的字典。

实现步骤

1. 初始化字典

首先我们需要创建一个初始字典,把a里的每个域名都设为键,对应的值先设为空列表,这样后续可以直接往里面加匹配到的URL。

2. 匹配并分组URL

有两种常见的实现方式,分别适合不同场景:

方式一:简单字符串匹配(适合当前场景)

因为你的b列表里的URL都是以a里的域名开头的,直接用字符串的startswith()方法就能快速判断匹配关系:

a = ['www.google.com', 'www.facebook.com', 'www.twitter.com']
b = ['www.google.com/adsense/', 'www.twitter.com/login', 'www.facebook.com/user/xx', 'www.facebook.com/user/yy', 'www.google.com/adwords']

# 初始化字典,每个域名对应空列表
c = {domain: [] for domain in a}

# 遍历b中的每个URL,匹配对应域名
for url in b:
    for domain in a:
        if url.startswith(domain):
            c[domain].append(url)
            break  # 找到匹配的域名就跳出循环,避免重复匹配

print(c)

运行后得到的结果就是你想要的:

{
    'www.google.com': ['www.google.com/adsense/', 'www.google.com/adwords'],
    'www.facebook.com': ['www.facebook.com/user/xx', 'www.facebook.com/user/yy'],
    'www.twitter.com': ['www.twitter.com/login']
}
方式二:URL解析匹配(更严谨,适合复杂场景)

如果后续遇到带http:///https://的URL,或者需要更精准的域名解析,推荐用Python内置的urllib.parse.urlparse模块来提取域名部分:

from urllib.parse import urlparse

a = ['www.google.com', 'www.facebook.com', 'www.twitter.com']
b = ['https://www.google.com/adsense/', 'http://www.twitter.com/login', 'www.facebook.com/user/xx']

# 初始化字典
c = {domain: [] for domain in a}
# 把a里的域名转成解析后的标准域名格式,方便匹配
parsed_domain_map = {urlparse(f'http://{domain}').netloc: domain for domain in a}

for url in b:
    # 解析当前URL的域名部分
    parsed_url = urlparse(url)
    # 如果解析后的域名在我们的映射里,就添加到对应列表
    if parsed_url.netloc in parsed_domain_map:
        original_domain = parsed_domain_map[parsed_url.netloc]
        c[original_domain].append(url)

print(c)

这种方式能处理各种URL格式的情况,避免因为前缀差异导致匹配失败。

小提示

  • 代码里的break很重要,能确保一个URL只会被匹配到对应的域名下,不会重复添加。
  • 如果b里有找不到匹配域名的URL,代码会自动忽略它,不会影响字典里的其他内容。

内容的提问来源于stack exchange,提问作者ElmiiS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:42:19