BeautifulSoup: получить содержимое [] в виде одной строки - PullRequest
18 голосов
/ 20 декабря 2010

Кто-нибудь знает элегантный способ получить все содержимое объекта супа в виде одной строки?

В данный момент я получаю contents, который, конечно, является списком, а затем перебираю его:

notices = soup.find("div", {"class" : "middlecontent"})
con = ""
for content in notices.contents:
    con += str(content)
print con

Спасибо!

Ответы [ 4 ]

28 голосов
/ 20 декабря 2010

А как насчет contents = str(notices)?

Или, может быть, contents = notices.renderContents(), который будет скрывать тег div.

4 голосов
/ 20 декабря 2010

Вы можете использовать метод join () :

notices = soup.find("div", {"class": "middlecontent"})
contents = "".join([str(item) for item in notices.contents])

Или используя выражение генератора:

contents = "".join(str(item) for item in notices.contents)
1 голос
/ 04 апреля 2015
#!/usr/bin/env python
# coding: utf-8
__author__ = 'spouk'

import BeautifulSoup
import requests


def parse_contents_href(url, url_args=None, check_content_find=None, tag='a'):
    """
    parse href contents url and find some text in href contents [ for example ]
    """
    html = requests.get(url, params=url_args)
    page = BeautifulSoup.BeautifulSoup(html.text)
    alllinks = page.findAll(tag,  href=True)
    result = check_content_find and filter(
        lambda x: check_content_find in x['href'], alllinks) or alllinks
    return result and "".join(map(str, result)) or False


url = 'https://vk.com/postnauka'
print parse_contents_href(url)
0 голосов
/ 01 апреля 2011

Но список рекурсивный, так что ... Я думаю, что это будет работать.
Я новичок в Python, поэтому код может выглядеть немного странно

getString = lambda x: \
    x if type(x).__name__ == 'NavigableString' \
    else "".join( \
    getString(t) for t in x)

contents = getString(notices)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...