从 pandas 列中提取 urls 信息

问题描述

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

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)之后,这就是我正在寻找的。​​p>

差异将由 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() 返回 (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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...