BeautifulSoup: объединить все элементы р в одну строку? - PullRequest
0 голосов
/ 16 октября 2018

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

элементов веб-страницы:

def scraping(url, html):
    data = {}
    soup = BeautifulSoup(html,"lxml")

    data["news"] = []

    page = soup.find("div", {"class":"container_news"}).findAll('p')
    page_text = ''

    for p in page:
        page_text += ''.join(p.findAll(text = True))
        data["news"].append(page_text)
    print(page_text)

    return data

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

"['New news on the internet. ', 'Here is some text. ', ""Here is some other."", ""And then there are other variations \n\nLooks like there are some non-text elements. \n\xa0""]" ...

Можно ли получить очиститель контента и объединить списки в одну строку?Решения BeautifulSoup предпочтительнее вариантов регулярных выражений.

Спасибо!

1 Ответ

0 голосов
/ 16 октября 2018

Я не уверен в важности сохранения data["news"], но это можно сделать в одной строке:

page_text = ' '.join(e.text for p in page for e in p.findAll(text=True))

Вместо ' ' вы можете использовать любую строку в качестве разделителя.

В противном случае

page_text = []

for p in page:
    page_text.extend(e.text for e in p.findAll(text=True))
    data["news"].append(page_text)

print(' '.join(page_text))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...