Использование BeautifulSoup для извлечения заголовка ссылки

Я пытаюсь извлечь название ссылки, используя BeautifulSoup. Код, с которым я работаю, выглядит следующим образом:

url = "http://www.example.com" source_code = requests.get(url) plain_text = source_code.text soup = BeautifulSoup(plain_text, "lxml") for link in soup.findAll('a', {'class': 'a-link-normal s-access-detail-page a-text-normal'}): title = link.get('title') print title 

Теперь пример элемента link содержит следующее:

  • Отправьте данные через веб-форму и извлеките результаты
  • Загрузка изображений из Google Search с помощью Python дает ошибку?
  •  <a class="a-link-normal s-access-detail-page a-text-normal" href="http://www.amazon.in/Introduction-Computation-Programming-Using-Python/dp/8120348664" title="Introduction To Computation And Programming Using Python"><h2 class="a-size-medium a-color-null s-inline s-access-title a-text-normal">Introduction To Computation And Programming Using <strong>Python</strong></h2></a> 

    Однако после запуска приведенного выше кода ничего не отображается. Как я могу извлечь значение, сохраненное в атрибуте title тега привязки, хранящегося в link ?

  • как получить содержимое javascript в python
  • BeautifulSoup Grab Visible Webpage Text
  • экранирование символов в XML-файле с помощью python
  • Извлеките все теги <script> на странице HTML и добавьте в конец документа
  • Как я могу прокручивать данные для нескольких страниц на веб-сайте с помощью python и beautifulsoup4
  • Разберите html-код для всей веб-страницы, прокрученной вниз
  • 2 Solutions collect form web for “Использование BeautifulSoup для извлечения заголовка ссылки”

    Похоже, вы поставили два пробела между s-access-detail-page и a-text-normal , которые, в свою очередь, не могут найти какую-либо подходящую ссылку. Попробуйте с правильным количеством пробелов, затем распечатайте количество найденных ссылок. Кроме того, вы можете распечатать сам тег – print link

     import requests from bs4 import BeautifulSoup url = "http://www.amazon.in/s/ref=nb_sb_noss_1?url=search-alias%3Daps&field-keywords=python" source_code = requests.get(url) plain_text = source_code.content soup = BeautifulSoup(plain_text, "lxml") links = soup.findAll('a', {'class': 'a-link-normal s-access-detail-page a-text-normal'}) print len(links) for link in links: title = link.get('title') print title 

    Здесь вы ищете точную строку , используя несколько классов. В этом случае строка класса должна точно соответствовать единым пространствам.

    См. Раздел « Поиск по классу CSS » в документации:

    Вы также можете найти точное строковое значение атрибута class:

     css_soup.find_all("p", class_="body strikeout") # [<p class="body strikeout"></p>] 

    Но поиск вариантов строкового значения не будет работать:

     css_soup.find_all("p", class_="strikeout body") # [] 

    Вам будет лучше искать отдельные классы:

     soup.find_all('a', class_='a-link-normal') 

    Если вы должны соответствовать нескольким классам, используйте селектор CSS :

     soup.select('aa-link-normal.s-access-detail-page.a-text-normal') 

    и неважно, в каком порядке вы перечислите классы.

    Демо-версия:

     >>> from bs4 import BeautifulSoup >>> plain_text = u'<a class="a-link-normal s-access-detail-page a-text-normal" href="http://www.amazon.in/Introduction-Computation-Programming-Using-Python/dp/8120348664" title="Introduction To Computation And Programming Using Python"><h2 class="a-size-medium a-color-null s-inline s-access-title a-text-normal">Introduction To Computation And Programming Using <strong>Python</strong></h2></a>' >>> soup = BeautifulSoup(plain_text) >>> for link in soup.find_all('a', class_='a-link-normal'): ... print link.text ... Introduction To Computation And Programming Using Python >>> for link in soup.select('aa-link-normal.s-access-detail-page.a-text-normal'): ... print link.text ... Introduction To Computation And Programming Using Python 
    Python - лучший язык программирования в мире.