Как получить ссылку href в p с помощью BeautifulSoup

#python #python-3.x

#python #python-3.x

Вопрос:

Я пытаюсь получить ссылку-указатель на другую статью с родительских веб-страниц. Приведенный ниже код показывает, как выглядит веб-сайт. Все веб-страницы с указателями начинаются с http://lenta.ru/ .

Итак, мой код пытается найти этот элемент href из исходного html-кода.

Однако он не печатает ссылку на указатель, которая находится внизу статьи.

 import requests
from lxml import html
from bs4 import BeautifulSoup
from urllib.request import urlopen

tmp = "https://uynaa.wordpress.com/2011/05/04/осама-бин-ладенийг-яаж-илрүүлсэн-бэ/"
html = urlopen(tmp).read()
soup = BeautifulSoup(html, "lxml")

for a in soup.find_all('a', href=True):
    if "lenta.ru" in a:
        print(a)
  

Как мне это сделать?

Ответ №1:

Ваша переменная a не является строкой; она имеет тип bs4.element.Tag . Если вы хотите искать текст в href атрибуте, вы можете написать:

 for a in soup.find_all('a', href=True):
    if "lenta.ru" in a.get('href', ''):
        print(a)
  

Это вернет ссылку, которую вы указали:

 <a href="http://lenta.ru/articles/2011/05/02/lamort/">http://lenta.ru/articles/2011/05/02/lamort/</a>
<a href="http://lenta.ru/articles/2011/05/02/lamort/" rel="nofollow" target="_blank">lenta.ru/articles/2011/05…</a>
<a href="http://lenta.ru/articles/2013/10/03/mourning/" rel="nofollow" target="_blank">lenta.ru/articles/2013/10…</a>
<a href="http://lenta.ru/articles/2013/09/30/freezone/" rel="nofollow" target="_blank">lenta.ru/articles/2013/09…</a>
<a href="http://lenta.ru/articles/2012/08/21/terranova/" rel="nofollow" target="_blank">lenta.ru/articles/2012/08…</a>
  

Если вы хотите еще больше ограничить свои результаты, вы могли бы ограничить свой поиск div элементом с классом entry :

 for a in soup.select('div.entry a'):
    if "lenta.ru" in a.get('href', ''):
        print(a)
  

Это привело бы к:

 <a href="http://lenta.ru/articles/2011/05/02/lamort/">http://lenta.ru/articles/2011/05/02/lamort/</a>