Извлечь URL из строки с несколькими URL в ней - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь извлечь URL из строки, в которой есть несколько URL.

В частности, я хочу выбрать первый экземпляр twitter.com/dog_rates/xxxxxxx из строки и удалить оставшиеся данные.

Примеры текста, который необходимо извлечь

INPUT

1. twitter.com/dog_rates/status/892420643555336193/photo/1 (desired version)

2. www.gofundme.com/3yd6y1c,twitter.com/dog_rates/status/878281511006478336/photo/1

3. m.facebook.com/story.php?story_fbid=1888712391349242&id=1506300642923754&refsrc=ht.co%2FURVffYPPjY&_rdr,twitter.com/dog_rates/status/812503143955202048/photo/1,twitter.com/dog_rates/status/812503143955202048/photo/1

4. www.gofundme.com/sams-smile,twitter.com/dog_rates/status/810984652412424192/photo/1,twitter.com/dog_rates/status/709901256215666688/photo/1,twitter.com/dog_rates/status/709901256215666688/photo/1,twitter.com/dog_rates/status/709901256215666688/photo/1,twitter.com/dog_rates/status/709901256215666688/photo/1

5. twitter.com/dog_rates/status/888804989199671297/photo/1,twitter.com/dog_rates/status/888804989199671297/photo/1

Я пытался извлечь URL-адреса с помощью нарезки, но столкнулся с проблемой, что существует несколько URL-адресов различной длины и позиции разделителя.

Ожидаемые результаты

  1. twitter.com / dog_rates / status / 892420643555336193 / photo / 1

  2. twitter.com / dog_rates / status / 878281511006478336 / photo/ 1

  3. twitter.com / dog_rates / status / 812503143955202048 / фото / 1

  4. twitter.com / dog_rates / status / 810984652412424192 / фото/ 1

  5. twitter.com / dog_rates / status / 888804989199671297 / фото / 1

Ответы [ 4 ]

2 голосов
/ 21 июня 2019

попробуйте это,

import pandas as pd

data = [
    'twitter.com/dog_rates/status/892420643555336193/photo/1',         
    'www.gofundme.com/3yd6y1c,twitter.com/dog_rates/status/878281511006478336/photo/1',
    'm.facebook.com/story.php?story_fbid=1888712391349242&id=1506300642923754&refsrc=ht.co%2FURVffYPPjY&_rdr,twitter.com/dog_rates/status/812503143955202048/photo/1,twitter.com/dog_rates/status/812503143955202048/photo/1',
    'www.gofundme.com/sams-smile,twitter.com/dog_rates/status/810984652412424192/photo/1,twitter.com/dog_rates/status/709901256215666688/photo/1,twitter.com/dog_rates/status/709901256215666688/photo/1,twitter.com/dog_rates/status/709901256215666688/photo/1,twitter.com/dog_rates/status/709901256215666688/photo/1',
    'twitter.com/dog_rates/status/888804989199671297/photo/1,twitter.com/dog_rates/status/888804989199671297/photo/1'
]

df=pd.DataFrame({'url':data})
df['res'] = df['url'].str.split(',').str[-1]

просто извлеките последнее значение, разделенное на ,

1 голос
/ 21 июня 2019

Попробуйте это:

my_data = [
    'twitter.com/dog_rates/status/892420643555336193/photo/1',         
    'www.gofundme.com/3yd6y1c,twitter.com/dog_rates/status/878281511006478336/photo/1',
    'm.facebook.com/story.php?story_fbid=1888712391349242&id=1506300642923754&refsrc=ht.co%2FURVffYPPjY&_rdr,twitter.com/dog_rates/status/812503143955202048/photo/1,twitter.com/dog_rates/status/812503143955202048/photo/1',
    'www.gofundme.com/sams-smile,twitter.com/dog_rates/status/810984652412424192/photo/1,twitter.com/dog_rates/status/709901256215666688/photo/1,twitter.com/dog_rates/status/709901256215666688/photo/1,twitter.com/dog_rates/status/709901256215666688/photo/1,twitter.com/dog_rates/status/709901256215666688/photo/1',
    'twitter.com/dog_rates/status/888804989199671297/photo/1,twitter.com/dog_rates/status/888804989199671297/photo/1'
]



final_results = []
pattern= 'twitter.com/dog_rates/'
​
for row in my_data:
    splited_row = row.split(',')
    for recod in splited_row:
        if recod.startswith(pattern):
            final_results.append(recod)
            break

In [10]:

final_results
Out[10]:
['twitter.com/dog_rates/status/892420643555336193/photo/1',
 'twitter.com/dog_rates/status/878281511006478336/photo/1',
 'twitter.com/dog_rates/status/812503143955202048/photo/1',
 'twitter.com/dog_rates/status/810984652412424192/photo/1',
 'twitter.com/dog_rates/status/888804989199671297/photo/1']
0 голосов
/ 21 июня 2019

попробуйте это с помощью import re

import re
input = '''1. twitter.com/dog_rates/status/892420643555336193/photo/1 (desired version)

2. www.gofundme.com/3yd6y1c,twitter.com/dog_rates/status/878281511006478336/photo/1

3. m.facebook.com/story.php?story_fbid=1888712391349242&id=1506300642923754&refsrc=ht.co%2FURVffYPPjY&_rdr,twitter.com/dog_rates/status/812503143955202048/photo/1,twitter.com/dog_rates/status/812503143955202048/photo/1

4. www.gofundme.com/sams-smile,twitter.com/dog_rates/status/810984652412424192/photo/1,twitter.com/dog_rates/status/709901256215666688/photo/1,twitter.com/dog_rates/status/709901256215666688/photo/1,twitter.com/dog_rates/status/709901256215666688/photo/1,twitter.com/dog_rates/status/709901256215666688/photo/1

5. twitter.com/dog_rates/status/888804989199671297/photo/1,twitter.com/dog_rates/status/888804989199671297/photo/1'''
input=input+'\n'

regex='(twitter.com/dog_rates/status/\d*/photo/1).*\n'

twitter_list = re.findall(regex,input)
i=1
for item in twitter_list:
    print(str(i)+'. '+item)
    i+=1
0 голосов
/ 21 июня 2019

Вы можете легко сделать это ... просто загрузите каждую строку в виде строки.

data= [ "twitter.com/dog_rates/status/892420643555336193/photo/1",
"www.gofundme.com/3yd6y1c,twitter.com/dog_rates/status/878281511006478336/photo/1",
"m.facebook.com/story.php?story_fbid=1888712391349242&id=1506300642923754&refsrc=ht.co%2FURVffYPPjY&_rdr,twitter.com/dog_rates/status/812503143955202048/photo/1,twitter.com/dog_rates/status/812503143955202048/photo/1",
"www.gofundme.com/sams-smile, twitter.com/dog_rates/status/810984652412424192/photo/1, twitter.com/dog_rates/status/709901256215666688/photo/1, twitter.com/dog_rates/status/709901256215666688/photo/1, twitter.com/dog_rates/status/709901256215666688/photo/1, twitter.com/dog_rates/status/709901256215666688/photo/1",
"twitter.com/dog_rates/status/888804989199671297/photo/1, twitter.com/dog_rates/status/888804989199671297/photo/1"
]

Теперь мы можем разбить данные на каждое из предложений, используя «,».

results=[]
for row in data:
    urls=row.split(",")
    for i in urls:
        if(i.strip().startswith("twitter.com/dog_rates/")):
            results.append(i.strip())
            break

Мы получим результаты в переменной results.

...