Вопрос по beautifulsoup, python – Разбор HTML с BeautifulSoup

2

(Картинка маленькая, вот еще одна ссылка:http://i.imgur.com/OJC0A.png)I»

Я пытаюсь извлечь текст обзора внизу. Я'мы пробовали это:

y = soup.find_all("div", style = "margin-left:0.5em;")
review = y[0].text

Проблема в том, что в нерасширенном виде есть нежелательный текстdiv теги, которые становится утомительным, чтобы удалить из содержания обзора. Ради жизни я просто могуне могу понять это. Может ли кто-нибудь помочь мне?

Изменить: HTML-код:

div style="margin-left:0.5em;">
     9 of 35 people found the following review helpful 
    
    
    
        
    
    That is true. I tried it myself this morning. There's a little note on the Audible site that says "a few titles will require two credits" or something like that. A Dance with Dragons is one of those few. 

Тег div над текстом выглядит следующим образом:


    
        <span class="h3color tiny">This review is from: </span>
        <a href="https://rads.stackoverflow.com/amzn/click/com/B005C7QVUE" rel="nofollow noreferrer">A Dance with Dragons: A Song of Ice and Fire: Book 5 (Audible Audio Edition)</a>
    

That is true. I tried it myself this morning. There's a little note on the Audible site that says "a few titles will require two credits" or something like that. A Dance with Dragons is one of those few. 

Ваш Ответ

2   ответа
1

http://www.crummy.com/software/BeautifulSoup/bs4/doc/#strings-and-stripped-strings предполагает, что метод .strings - это то, что вам нужно - он возвращает итератор каждой строки в объекте. Поэтому, если вы превратите этот итератор в список и возьмете последний элемент, вы должны получить то, что хотите. Например:

$ python
>>> import bs4
>>> text = '<div style="mine"><div>unwanted</div>wanted</div>'
>>> soup = bs4..find_all("div", style="mine")[0].text
u'unwantedwanted'
>>> list(soup.find_all("div", style="mine")[0].strings)[-1]
u'wanted'
Исправлено - спасибо. rkday
сделать отступ в своем сообщении правильно Rubens
1

div.tiny

review = soup.find("div", "tiny").findNextSibling(text=True)

Полный пример:

#!/usr/bin/env python
from bs4 import BeautifulSoup

html = """

   9 of 35 people found the following review helpful 




    <span class="h3color tiny">This review is from: </span>
    <a href="http://rads.stackoverflow.com/amzn/click/B005C7QVUE">
     A Dance with Dragons: A Song of Ice and Fire: Book 5 (Audible Audio Edition)</a>


That is true. I tried it myself this morning. There's a little note on the Audible site that says "a few titles will require two credits" or something like that. A Dance with Dragons is one of those few."""

soup = BeautifulSoup(html)
review = soup.find("div", "tiny").findNextSibling(text=True)
print(review)
Выход
That is true. I tried it myself this morning. There's a little note on the Audible site that says "a few titles will require two credits" or something like that. A Dance with Dragons is one of those few.

Вот'эквивалентlxml код, который выдает тот же результат:

import lxml.html

doc = lxml.html.fromstring(html)
print doc.find(".//div[@class='tiny']").tail
@ user1709173: яЯ попробовал мой код с вашим HTML, и он работает. Какие результаты вы получаете? jfs
@ user1709173: это работает? Если нет, опубликуйте фактический HTML (как текст, а не рисунок), который обеспечивает достаточный контекст, то есть включает элементы вокруг текста. "хвост" сразу послекрошечный" элемент, так что следующий брат должен работать. jfs
@ user1709173: что вы получите, если запустите полный пример, размещенный выше? jfs
Извините за путаницу, текст нет под тегом div с классом крошечные. Это's под основным тегом div со стилем margin-left: 0.5em; user1709173

Похожие вопросы