python - 提取多个 URL - Python
问题描述
我想从存储在熊猫数据框中的文本(评论)中提取几个链接。我的目标是将提取的 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))
但我只收到此错误消息:
“插入列的索引与框架索引不兼容”
正如我之前所说,我的目标是将提取的 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
,因此groupby
在创建list
s 的第一级是必要的:
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']})
推荐阅读
- java - 带有 CutOFF 的 MergeSort 比常规 MergeSort 慢 - Java
- javascript - 如何以角度保持路线的视图
- django - /assignment/get/ 中的 ValueError 字段“zip”需要一个数字,但得到了“zip”
- url - 没有 www 无法访问网站
- javascript - 如果未发送电子邮件,Nodemailer 不会给出错误
- palantir-foundry - 数据连接是否支持 SSL 加密的 Oracle JDBC 源?
- google-cloud-firestore - 如何获取 Firestore 集合密钥?
- java - 自动完成 TextView Android。完成首字母
- reactjs - 尝试使用“useState”时反应过多的重新渲染错误
- palantir-foundry - 如何处理“无法在 300 秒内执行广播”?