Извлечение URL из href на сайте html

#python #html #web-scraping #beautifulsoup

#python #HTML #очистка веб-страниц #прекрасный суп #beautifulsoup

Вопрос:

У меня есть следующее, уже извлеченное с веб-страницы:

  <a class="Directory-listLink" data-ya-track="todirectory" href="united-states/in">Indiana</a>,
 <a class="Directory-listLink" data-ya-track="todirectory" href="united-states/ia">Iowa</a>,
 <a class="Directory-listLink" data-ya-track="todirectory" href="united-states/ks">Kansas</a>,
 <a class="Directory-listLink" data-ya-track="todirectory" href="united-states/ky">Kentucky</a>,
  

Я хочу только href=»united-states / il» часть каждого извлеченного. В настоящее время я пытаюсь сделать что-то вроде этого:

 for state in soup_state.find('a',href=True):
    print(state['href'])
  

Я постоянно получаю сообщение об ошибке:

Ошибка атрибута: объект ResultSet не имеет атрибута ‘find’. Вероятно, вы обрабатываете список элементов как один элемент. Вы вызывали find_all (), когда хотели вызвать find()?

Я хочу, чтобы это запускалось в цикле for, чтобы я мог извлечь URL-адрес каждого состояния, но в настоящее время не могу

Ответ №1:

Я не уверен, как у вас получилось soup_state , но попробуйте:

 for state in soup_state:
     print(state['href'])
  

и посмотрим, решит ли это проблему.

Ответ №2:

Вы можете использовать регулярное выражение, чтобы найти это содержимое.

 import re

lines = ['<a class="Directory-listLink" data-ya-track="todirectory" href="united-states/in">Indiana</a>',
         '<a class="Directory-listLink" data-ya-track="todirectory" href="united-states/ia">Iowa</a>',
         '<a class="Directory-listLink" data-ya-track="todirectory" href="united-states/ks">Kansas</a>',
         '<a class="Directory-listLink" data-ya-track="todirectory" href="united-states/ky">Kentucky</a>']

for l in lines:
    print(re.search('href="[^"]*"',l).group())
  

Это даст результат:

 href="united-states/in"
href="united-states/ia"
href="united-states/ks"
href="united-states/ky"