Невозможно получить HREF с помощью beautiful soup

#python #beautifulsoup

#python #beautifulsoup

Вопрос:

Невозможно получить ссылку из href тега с помощью beautiful soup.

Я предоставил структуру html ниже. Пробовал различную логику извлечения, но код все время возвращается пустым, пожалуйста, сообщите

 <div class="review_list_pagination">
<p class="page_link review_next_page">
      <a href="/reviews/in/hotel/best-western-star-residency.html" 
           id="review_next_page_link">Next page </a>
 </p>
</div>
  

Пробовал

link = soup.find_all(attrs={"class": "page_link review_next_page"})

link = soup.find_all('p', attrs = {'class': 'page_link review_next_page'})

Результат:

 [<p class="page_link review_next_page"><a href="/reviews/in/hotel/best-western-star-residency.html?page=2amp;amp;" id="review_next_page_link">Next page</a></p>, 
<p class="page_link review_next_page"> <a href="/reviews/in/hotel/best western-star-residency.html?page=2amp;amp;" id="review_next_page_link">Next page</a></p>]
  

Но
print(link[0].get('href'))

Результат: пустой

Ожидаемый: /reviews/in/hotel/best-western-star-residency.html?page=2amp;amp;

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

1. возможно, страница использует JavaScript для добавления элемента — BS не может запускать JavaScript.

2. почему вы получаете <p> if href is in <a> ?

3. Вы можете получить href, потому что вы пытаетесь использовать его в теге p, а не в теге a.

4. find_all('a', {"id": "review_next_page_link"})[0].get("href")

Ответ №1:

Попробуйте следующее:

 link = find('a', {"id": "review_next_page_link"})["href"]
  

То, что вы получаете, — это тег p из soup. Вы не можете получить свойство внутреннего тега a из тега p, который вы находите.

В строке выше будет найден тег с id =review_next_page_link , и вы можете просто получить его значение href.

Ответ №2:

Ради будущих поколений (: D) вы также можете использовать любой из них:

 soup3.select('a[id="review_next_page_link"]')[0]['href']

  #or

soup3.select_one('a[id="review_next_page_link"]')['href']

  #or

soup3.select('#review_next_page_link')[0]['href']
  

… и я уверен, что есть и другие способы сделать это. Все они выводят:

 '/reviews/in/hotel/best-western-star-residency.html'
  

Ответ №3:

Существует множество разных способов решения этой проблемы, я остановился на приведенном ниже. Надеюсь, это поможет.

 link = soup.find("p",{"class":"page_link review_next_page"}).a['href']