#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"