Ответ 1
Как насчет contents = str(notices)
?
Или, может быть, contents = notices.renderContents()
, который скроет тег div.
Кто-нибудь знает элегантный способ получить все содержимое супового объекта как одну строку?
В настоящий момент я получаю contents
, который, конечно же, является списком, а затем повторяет его:
notices = soup.find("div", {"class" : "middlecontent"})
con = ""
for content in notices.contents:
con += str(content)
print con
Спасибо!
Как насчет contents = str(notices)
?
Или, может быть, contents = notices.renderContents()
, который скроет тег div.
Вы можете использовать метод 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)
#!/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)
Но список рекурсивный, поэтому... Я думаю, что это сработает. Я новичок в python, поэтому код может выглядеть немного странным
getString = lambda x: \
x if type(x).__name__ == 'NavigableString' \
else "".join( \
getString(t) for t in x)
contents = getString(notices)