Я пытаюсь найти конкретную ссылку на странице с помощью скрипта python

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

Ссылка на beautifulsoup API.