#python #beautifulsoup #urllib2
#python #beautifulsoup #urllib2
Вопрос:
Я пытаюсь выяснить, как извлекать с данного сайта только ссылки с определенным текстом внутри
Это программа, которую я использую:
from BeautifulSoup import BeautifulSoup
import urllib2
import re
html_page = urllib2.urlopen("https://www.example.net/")
soup = BeautifulSoup(html_page)
linkContent = "Tartan Flannel Shirt "
for link in soup.findAll('a'):
print link.get('href')
Ссылка Html выглядит так
<a class="name-link" href="/shop/all/shirts">Tartan Flannel Shirt </a>
Если я запущу приведенную выше программу, результатом будет список всех ссылок на сайте, но я бы хотел, чтобы он показывал только ссылку с клетчатой фланелевой рубашкой внутри.
Комментарии:
1. Возможно, стоит отметить, что вам не хватает закрывающей кавычки — значит, в вашем скрипте есть синтаксическая ошибка
2. использование python 2?
3. @PatrickArtner вы предлагаете использовать Python3?
4. @AleksJ Спасибо, я не заметил
5. Я предлагаю пометить
python 2.x
, если вы его используете — он мертв, а python 3.9 скрывается, так что вы сильно отстаете.
Ответ №1:
Вы можете указать лямбда-функцию в text=
качестве параметра .find_all()
. Например:
from bs4 import BeautifulSoup
html_doc = '''
<a href="#1">Something else</a>
<a href="#2">This link contains Tartan Flannel Shirt</a>
<a href="#3">Something else</a>
'''
soup = BeautifulSoup(html_doc, 'html.parser')
for link in soup.find_all('a', text=lambda t: 'Tartan Flannel Shirt' in t):
print(link)
С принтами:
<a href="#2">This link contains Tartan Flannel Shirt</a>
Аналогичным образом, вы можете искать атрибуты таким образом, например href=
, атрибуты ссылок:
from bs4 import BeautifulSoup
html_doc = '''
<a href="http://link1">Link1</a>
<a href="http://link2">Link2</a>
<a href="http://link3">Link3</a>
'''
soup = BeautifulSoup(html_doc, 'html.parser')
for link in soup.find_all('a', href=lambda t: 'link2' in t):
print(link)
С принтами:
<a href="http://link2">Link2</a>