从列中提取url信息

yduiuuwa  于 2021-07-14  发布在  Java
关注(0)|答案(2)|浏览(413)

我需要保留链接的某些部分:

Link             
www.xxx.co.uk/path1
www.asx_win.com/path2
www.asdfe.aer.com
...

期望输出:

Link2
xxx.co.uk
asx_win.com
asdfe.aer.com
...

我曾经 urlparse 以及 tldextract 但我也有

Netloc
www.xxx.co.uk
www.asx_win.com
www.asdfe.aer.com
...

TLDEXTRACT

xxx
asx_win
asdfe.aer
...

通过使用字符串,一些问题可能来自以下方面:

9     https://www.facebook.com/login/?next=https%3A%...
10    https://pt-br.facebook.com/114546123419/pos...
11    https://www.facebook.com/login/?next=https%3A%...
20    http://fsareq.media/?pg=article&id=s...
22    https://www.wq-wq.com/lrq-rqwrq-...
24    https://faseqrq.it/2020/05/28/...

我的尝试是考虑从url解析(netloc)和tldextract(即,结束部分)得到的内容之间的差异。例如,我从netloc得到 www..co.uk 从这里我得到 `` . 这意味着如果我从netloc中减去tldextract www 以及 co.uk . 我会用公共部分作为分界点,并保留后面的部分(即。, .co.uk ),这就是我要找的。
不同之处在于 df['Link2'] = [a.replace(b, '').strip() for a, b in zip(df['Netloc'], df['TLDEXTRACT'])] . 这只是因为我需要考虑的结尾部分(后缀)。现在我需要了解如何只考虑结束部分来获得预期的输出。您可以在上面的示例中使用netloc和tldextract列。

uelo1irk

uelo1irk1#

tldextract.extract() 返回的命名元组 (subdomain, domain, suffix) :

tldextract.extract('www.xxx.co.uk')

# ExtractResult(subdomain='www', domain='xxx', suffix='co.uk')

所以你可以加入索引 [1:] :

import tldextract
df['Extracted'] = df.Link.apply(lambda x: '.'.join(tldextract.extract(x)[1:]))

# Link     Extracted

# 0                                www.xxx.co.uk/path1     xxx.co.uk

# 1                              www.asx_win.com/path2   asx_win.com

# 2                                  www.asdfe.aer.com       aer.com

# 3  https://www.facebook.com/login/?next=https%3A%...  facebook.com

# 4     https://pt-br.facebook.com/114546123419/pos...  facebook.com

# 5  https://www.facebook.com/login/?next=https%3A%...  facebook.com

# 6            http://fsareq.media/?pg=article&id=s...  fsareq.media

# 7                https://www.wq-wq.com/lrq-rqwrq-...     wq-wq.com

# 8                  https://faseqrq.it/2020/05/28/...    faseqrq.it
svujldwt

svujldwt2#

首先删除http/https:

from urllib.parse import urlparse
def remove(row):
    if(row['urls'].str.contains('https') or row['urls'].str.contains('http')):
        return urlparse(row['urls']).netloc

withouthttp = df.apply(lambda x: remove(x), axis=1)

然后:
删掉前4个标志(“www.”)
在(/)之后剪切所有内容

df = pd.DataFrame({'urls': ['www.xxx.co.uk/path1', 'www.asx_win.com/path2', 'www.asdfe.aer.com']})
df['urls'] = df['urls'].str[4:]
df['urls'].str.split('/').str[0]

您还可以使用https和http编辑所有记录:

onlyHttps = df.loc[df['urls'].str.contains("https", case=False)]
allWithoutHttps = df[~df["urls"].str.contains("https", case=False)]

以及所有操作之后(删除www和删除http/https-concat正确记录)

pd.concat([https, http, www])

相关问题