Как получить текст в тегах p с помощью bs4 - PullRequest
0 голосов
/ 05 октября 2019

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

Я много гуглил, но все решения либо возвращают "Нет", либо выдают эту ошибку:

Traceback (most recent call last):
  File "E:/Python/News Uploader to Google Driver/venv/Scripts/main.py", line 41, in <module>
    contents = parse(text)
  File "E:/Python/News Uploader to Google Driver/venv/Scripts/main.py", line 28, in parse
    article = soup.find("div", {"class": "content_text row description"}).findAll('p')
AttributeError: 'NoneType' object has no attribute 'findAll
def parse(url):
    html = requests.get(url)
    #array_of_paragraphs = [""]
    soup = BeautifulSoup(html.content, 'html5lib')
    text = []
    text = soup.find("div", {"class": "content_text row description"}).findAll('p')
    for t in text:
       text = ''.join(element.findAll(text=True))
    return text

URL-адрес в настоящее время такой: https://gadgets.ndtv.com/mobiles/news/samsung-galaxy-a-series-56-percent-q2-smartphone-sales-share-counterpoint-2112319

Вы можете использовать его в целях тестирования

Помимо сообщения «Нет» или ошибкина консоли ничего не отображается

Ответы [ 2 ]

0 голосов
/ 05 октября 2019

Добавление дочернего элемента p к родителю, определенному классом

import requests
from bs4 import BeautifulSoup as bs

headers = {'User-Agent':'Mozilla/5.0'}
r = requests.get('https://gadgets.ndtv.com/mobiles/news/samsung-galaxy-a-series-56-percent-q2-smartphone-sales-share-counterpoint-2112319', headers = headers)
soup = bs(r.content, 'lxml')
print('\n'.join([i.text for i in soup.select('.description p')]))

import requests
from bs4 import BeautifulSoup as bs

def parse(url):
    headers = {'User-Agent':'Mozilla/5.0'}
    r = requests.get(url, headers = headers)
    soup = bs(r.content, 'lxml')
    text = '\n'.join([i.text for i in soup.select('.description p')])
    return text

parse('https://gadgets.ndtv.com/mobiles/news/samsung-galaxy-a-series-56-percent-q2-smartphone-sales-share-counterpoint-2112319')
0 голосов
/ 05 октября 2019

Попробуйте эту несколько упрощенную версию:

def parse(url):
    html = requests.get(url)
    soup = BeautifulSoup(html.content, 'html5lib')
    final_text = []    
    inf= soup.find('div', class_="content_text row description")
    info = inf.find_all('p')
    for i in info:
        final_text.append(i.text)
    return final_text

Вывод - это все, что находится между тегами <p> (внутри цели div).

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