python - 提取多个 URL - Python

标签 python python-3.x pandas dataframe

我想从文本(评论)中提取多个链接,这些链接存储在 panda 数据框中。我的目标是将提取的 URL 添加到原始数据集的新列中。通过将以下方法应用于我的文本,我能够提取注释并将其存储在变量 URL 中,并将其转换为另一个 pandas 数据帧。在这种情况下,我不确定这是否是提取必要信息的有效方法。

URL = (ALL.textOriginal.str.extractall("(?P<URL>(https?://(?:www)?(?:[\w-]{2,255}(?:\.\w{2,6}){1,2})(?:/[\w&%?#-]{1,300})))").reset_index('match', drop=True))

URL_df = pd.DataFrame(data=URL)
URL_df.drop([1],axis=1)

gives me:

596    https://www.tag24.de/nachrichten
596    http://www.tt.com/panorama 
596    http://www.wz.de/lokales
666    https://www.svz.de/regionales
666    https://www.watson.ch/Leben
...    ...

数据帧仅包含索引和超链接。这种方法的问题是,一些索引是重复的,因为一条评论可能存在多个 URL,这些 URL 将被提取。我尝试了不同的方法来解决这个问题,例如:

pd.concat([ALL, URL_df.drop], axis=1).sort_index()

我还尝试通过应用将 URL 直接存储到原始数据帧:

ALL['URL'] = ALL.textOriginal.str.extractall("(?P<URL>(https?://(?:www)?(?:[\w-]{2,255}(?:\.\w{2,6}){1,2})(?:/[\w&%?#-]{1,300})))").reset_index('match', drop=True))

但我只收到此错误消息:

"incompatible index of the inserted column with frame index"

正如我之前所说,我的目标是将提取的 URL 存储在新列中,例如:

text                             URL
"blablabla link1, link2, link3"  [https://www.tag24.de/nachrichten, http://www.tt.com/panorama, http://www.wz.de/lokales]
"blablabla link1, link2"         [https://www.svz.de/regionales, https://www.watson.ch/Leben]
...    ...

最佳答案

我认为需要findall :

pat = "(https?://(?:www)?(?:[\w-]{2,255}(?:\.\w{2,6}){1,2})(?:/[\w&%?#-]{1,300}))"
ALL['URL'] = ALL.textOriginal.str.findall(pat)
print (ALL)
                                        textOriginal  \
0  https://www.tag24.de/nachrichten http://www.tt...   
1  https://www.svz.de/regionales https://www.wats...   

                                                 URL  
0  [https://www.tag24.de/nachrichten, http://www....  
1  [https://www.svz.de/regionales, https://www.wa...  ]

另一个解决方案 extractall ,它返回 MultiIndex,因此需要在创建 list 时按第一级进行 groupby:

pat = "(https?://(?:www)?(?:[\w-]{2,255}(?:\.\w{2,6}){1,2})(?:/[\w&%?#-]{1,300}))"

ALL['URL']  = ALL.textOriginal.str.extractall(pat).groupby(level=0)[0].apply(list)
print (ALL)
                                        textOriginal  \
0  https://www.tag24.de/nachrichten http://www.tt...   
1  https://www.svz.de/regionales https://www.wats...   

                                                 URL  
0  [https://www.tag24.de/nachrichten, http://www....  
1  [https://www.svz.de/regionales, https://www.wa...  

设置:

ALL = pd.DataFrame({'textOriginal': ['https://www.tag24.de/nachrichten http://www.tt.com/panorama http://www.wz.de/lokales', 'https://www.svz.de/regionales https://www.watson.ch/Leben']})

关于python - 提取多个 URL - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51358293/

相关文章:

python - 如何计算 py-musicbrainz2 发行结果中的光盘编号?

python - 使用 Python 进行阶乘计算

python - pandas:滚动意味着不工作

python - 如何在不填充日期时间间隙的情况下进行上采样

python - Selenium Fedora XFCE 亚马逊 EC2

python - 如何在 python 中为多种语言编写文档字符串

python - 如何将从 .arff 文件加载的 arff 对象转换为 dataframe 格式?

python-3.x - 使用上一年的现有行将新行添加到数据框

python - 为什么 Python 的 subprocess'popen 在 unix 和 windows 之间如此不同?

python - 为什么我的函数部分地做它应该做的事情?