使用Python中URL的每一行的域名创建一列

2024-05-23 13:51:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我从Python开始,在创建从URL列获取域名的新列时遇到了问题

谁能给我解释一下怎么做

import pandas as pd

concu = pd.read_csv(r'/Desktop/Concu.csv')

df = pd.DataFrame(concu, columns= ['URL'])

#df3['Domain'] = #GET THE DOMAIN NAME (NO HTTP/HTTPS/WWW. AND without everything 
after .com, .io...)

print(df)




                                                   URL
0     https://smartkeyword.io/seo-outils-google-util...
1     https://smartkeyword.io/referencement-naturel-...
2     https://smartkeyword.io/seo-on-page-urls-optim...
3     https://smartkeyword.io/seo-outils-google-util...
4     https://smartkeyword.io/seo-outils-google-cach...
...                                                 ...
6758           https://www.primelis.com/consultant-seo/
6759       https://www.primelis.com/expertises/seo/aso/
6760  https://www.primelis.com/labo/consideration-li...
6761  https://www.primelis.com/faq/fonctionnement-re...
6762  https://www.primelis.com/blog/comment-est-ne-l...

[6763 rows x 1 columns]

多谢各位


Tags: columnscsvhttpsiocomseourldf
1条回答
网友
1楼 · 发布于 2024-05-23 13:51:52

您可以尝试提取///之间的任何内容,其中www.是可选的,并使用第二个组

>>> df['URL'].str.extract('//(www\.){0,1}(.*?)/')[1]

0       smartkeyword.io
1       smartkeyword.io
2       smartkeyword.io
3       smartkeyword.io
4       smartkeyword.io
6758       primelis.com
6759       primelis.com
6760       primelis.com
6761       primelis.com
6762       primelis.com
Name: 1, dtype: object

如评论中所述,如果您不想使用组捕获,您可以使用(?...)?查找零次或精确的www.并提取域

>>> df['URL'].str.extract('//(?:www\.)?(.*?)/')

                    0
0     smartkeyword.io
1     smartkeyword.io
2     smartkeyword.io
3     smartkeyword.io
4     smartkeyword.io
6758     primelis.com
6759     primelis.com
6760     primelis.com
6761     primelis.com
6762     primelis.com

注意:?:表示子模式是非捕获子模式。这意味着(?:www\.)中匹配的任何内容,即使它被()包围,也不会出现在匹配列表中,只有(.*?)会出现

由于您在评论中提到也有子域,如果有,请尝试以下操作:

df['URL'].str.extract('//(?:\w+\.)?(.*?\..*?)/')

上面的正则表达式将只捕获所需的跳过www.或任何其他子域的文本

相关问题 更多 >