Уведомления

Группа в Telegram: @pythonsu

#1 Март 28, 2015 21:43:17

IRiot
Зарегистрирован: 2015-03-28
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярки. Получение ссылки.

Доброго времени суток, форумчане. Работаю с urllib + BeautifulSoup. Поучаю список ссылок так:

for link in soup.find_all('a'):
    url = link.get('href')
    print(url)
вывод:
/home/123
/site/123456
/windows/987
/123/любойнаборцифр
/dev/456

Собственно сабж. Как мне получить ссылку вида “/123/любойнаборцифр”, которая присутствует среди тучи других. Знаю, что как то нужно использовать re, но вот как …без понятия. Оф. документация не очень то помогает, ибо только сел изучать язык. Заранее благодарен за любой ответ.

Офлайн

#2 Март 28, 2015 21:55:47

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Регулярки. Получение ссылки.

а какое правило (условие)?
почему именно “/123/любойнаборцифр”?

или же вам нужно получить объект ссылка которого /123/любойнаборцифр?



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Март 28, 2015 22:02:53)

Офлайн

#3 Март 28, 2015 22:03:34

IRiot
Зарегистрирован: 2015-03-28
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярки. Получение ссылки.

Просто на страничке которую я парсю имееются туча ссылок, среди которых есть ссылка вида: “/123/любойнаборцифр”. Т.е после последнего слэша в ссылке каждый раз может быть рандомное число. Я не знаю как её выудить оттуда. Мне нужно получить просто эту строку(ссылку) на вывод. Надеюсь ответил на ваш вопрос, хоть и не совсем его понял.

Отредактировано IRiot (Март 28, 2015 22:08:17)

Офлайн

#4 Март 28, 2015 22:23:01

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Регулярки. Получение ссылки.

import re
# . . .
# ваш код
# . . .
for link in soup.find_all('a', href=re.compile('^/123/')):
    url = link.get('href')
    print(url)



————————————————
-*- Simple is better than complex -*-

Офлайн

#5 Март 28, 2015 22:25:55

IRiot
Зарегистрирован: 2015-03-28
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярки. Получение ссылки.

Большое спасибо. Проблема решена.

Офлайн

#6 Март 29, 2015 00:20:47

IRiot
Зарегистрирован: 2015-03-28
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярки. Получение ссылки.

Дабы не создавать новой темы, еще вопрос по регуляркам. Имеется строка:

<img class="user" src=//owl.123.ru/pic?data=123123&width=32&height=32>
Пытаюсь извлечь содержимое data (т.е 123123, которое всегда разное) так:
data = soup.find('img', src = re.compile(r'data=(.+?)&'))	
a = data.get('src')
print(a)
Вместо вывода 123123, выводит src=//owl.123.ru/pic?data=123123&width=32&height=32. В чем проблема? Как это можно решить? Заранее благодарю за любой ответ.

Отредактировано IRiot (Март 29, 2015 00:21:45)

Офлайн

#7 Март 29, 2015 00:58:22

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Регулярки. Получение ссылки.

IRiot
В чем проблема?
вы получаете src. никакой проблемы нету
IRiot
Как это можно решить?
>>> import urllib.parse
>>> urllib.parse.parse_qs(urllib.parse.urlparse('//owl.123.ru/pic?data=123123&width=32&height=32').query)
{'height': ['32'], 'data': ['123123'], 'width': ['32']}
>>> urllib.parse.parse_qs(urllib.parse.urlparse('//owl.123.ru/pic?data=123123&width=32&height=32').query)['data'][0]
'123123'



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Март 29, 2015 00:58:58)

Офлайн

#8 Март 29, 2015 12:57:56

IRiot
Зарегистрирован: 2015-03-28
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярки. Получение ссылки.

Огромное вам спасибо

Офлайн

#9 Март 29, 2015 13:21:15

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Регулярки. Получение ссылки.

>>> import re
>>> 
>>> s = r'src=//owl.123.ru/pic?data=123123&width=32&height=32'
>>> 
>>> out = re.search(r'data=(\d+)', s).group(1)
>>> out
'123123'
>>>



Офлайн

#10 Март 29, 2015 13:57:54

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Регулярки. Получение ссылки.

py.user.next

>>> import re 
>>> s = r'src=//owl.123.ru/pic?lala_no_data=123123&data=9999&width=32&height=32'
>>> print re.search(r'data=(\d+)', s).group(1)
123123



————————————————
-*- Simple is better than complex -*-

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version