从 pandas 列中提取 urls 信息

Extract urls information from pandas column

我需要保留 link:

的某些部分
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
...

我用了 urlparsetldextract 但我得到了其中一个

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 parse (Netloc) 和 tldextract(即结尾部分)得到的差异。 例如,从 Netloc 我得到 www.xxx.co.uk,从 tldextract 我得到 xxx。这意味着如果我从 Netloc 中减去 tldextract,我会得到 wwwco.uk。我会使用公共部分作为截止点并保留之后的部分(即 .co.uk),这就是我要寻找的。

差异将由 df['Link2'] = [a.replace(b, '').strip() for a, b in zip(df['Netloc'], df['TLDEXTRACT'])] 之类的东西给出。这仅适用于我需要考虑的结尾部分(后缀)。 现在我需要了解如何只考虑结尾部分以获得预期的输出。您可以在上面的示例中使用列 Netloc 和 TLDEXTRACT。

首先删除 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 - 连接正确的记录)

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

tldextract.extract() returns (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