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