как получить href из списка тегов с помощью скрипта python?

#html #python-3.x

#HTML #python-3.x

Вопрос:

У меня есть html-файл ‘links.html ‘, из этого html-файла я хочу извлечь href //www.medicineindia.org/medicine-brand — details/8414/capicare, который предназначен для строки CAPICARE. Как это сделать с помощью скрипта python

Код ‘links.html ‘ это :

 <a itemprop="url" href="//www.medicineindia.org/medicine-brand- 
details/12220/cholstig"><span itemprop="name">CHOLSTIG</span></a>
<a itemprop="url" href="//www.medicineindia.org/medicine-brand- 
details/8414/capicare"><span itemprop="name">CAPICARE</span></a>
<a itemprop="url" href="//www.medicineindia.org/medicine-brand- 
details/230/cyclozobid"><span itemprop="name">CYCLOZOBID</span></a>
<a itemprop="url" href="//www.medicineindia.org/medicine-brand- 
details/6855/cinkona"><span itemprop="name">CINKONA</span></a>
  

Комментарии:

1. Что вы пробовали, что не сработало?

Ответ №1:

Вы могли бы выполнить эту задачу с помощью «простого» регулярного выражения, которое использует преимущества групп захвата (и не-захвата):

 import re

html = ('<a itemprop="url" href="//www.medicineindia.org/medicine-brand'
        '-details/12220/cholstig"><span itemprop="name">CHOLSTIG</span></a><a '
        'itemprop="url" href="//www.medicineindia.org/medicine-brand-details'
        '/8414/capicare"><span itemprop="name">CAPICARE</span></a><a '
        'itemprop="url" href="//www.medicineindia.org/medicine-brand-details'
        '/230/cyclozobid"><span itemprop="name">CYCLOZOBID</span></a><a '
        'itemprop="url" href="//www.medicineindia.org/medicine-brand-details'
        '/6855/cinkona"><span itemprop="name">CINKONA</span></a>')

regex = '(?:href=")([^"] )(?:.*?<span.*?>)(.*?)(?:</span>)'

matches = re.findall(regex, html)

for m in matches:
    print(f'Brand: {m[1]}, URL: {m[0]}')
  

Это приведет к следующему:

 Brand: CHOLSTIG, URL: //www.medicineindia.org/medicine-brand-details/12220/cholstig
Brand: CAPICARE, URL: //www.medicineindia.org/medicine-brand-details/8414/capicare
Brand: CYCLOZOBID, URL: //www.medicineindia.org/medicine-brand-details/230/cyclozobid
Brand: CINKONA, URL: //www.medicineindia.org/medicine-brand-details/6855/cinkona
  

Который представляет собой форматированный вывод при переборе списка кортежей, matches где ссылка сопоставляется с соответствующим содержимым ‘span’.

Комментарии:

1. Предложенное вами решение не работает. На самом деле, мне нужно извлечь эту ссылку из ‘tags’, и я создал ‘tags’ из следующего кода: url= some_url … response = requests.get(url) # Извлечение исходного кода страницы. data = response.text soup = BeautifulSoup(data, ‘lxml’) title_bn = CAPICORE # Извлечение всех тегов <a> в список. теги = soup.find_all(‘a’) Теперь из тегов мне нужно извлечь эту ссылку для CAPICORE

2. Если вместо извлечения всех ссылок вы разберете HTML из response.text в строку и запустите findall с флагом многострочности, тогда это сработает.

3. Кроме того, если вы используете BeautifulSoup, то почему вы анализируете HTML как «LXML»?