Найти - Пользователи
Полная версия: Регулярки. Получение ссылки.
Начало » Python для новичков » Регулярки. Получение ссылки.
1
IRiot
Доброго времени суток, форумчане. Работаю с 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, но вот как …без понятия. Оф. документация не очень то помогает, ибо только сел изучать язык. Заранее благодарен за любой ответ.
terabayt
а какое правило (условие)?
почему именно “/123/любойнаборцифр”?

или же вам нужно получить объект ссылка которого /123/любойнаборцифр?
IRiot
Просто на страничке которую я парсю имееются туча ссылок, среди которых есть ссылка вида: “/123/любойнаборцифр”. Т.е после последнего слэша в ссылке каждый раз может быть рандомное число. Я не знаю как её выудить оттуда. Мне нужно получить просто эту строку(ссылку) на вывод. Надеюсь ответил на ваш вопрос, хоть и не совсем его понял.
terabayt
import re
# . . .
# ваш код
# . . .
for link in soup.find_all('a', href=re.compile('^/123/')):
    url = link.get('href')
    print(url)
IRiot
Большое спасибо. Проблема решена.
IRiot
Дабы не создавать новой темы, еще вопрос по регуляркам. Имеется строка:
<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. В чем проблема? Как это можно решить? Заранее благодарю за любой ответ.
terabayt
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'
IRiot
Огромное вам спасибо
py.user.next
>>> 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'
>>>
terabayt
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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB