Как игнорировать текст в одном классе при извлечении данных с веб-сайта Python - PullRequest
0 голосов
/ 21 января 2020

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

url = "https://www.f150forum.com/f118/do-all-2018-f150-trucks-come-adaptive-cruise-control-369065/index2/"
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')

comments_lst= soup.findAll('div',attrs={"class":"ism-true"})
comments =[]
for item in comments_lst:
    result = [item.get_text(strip=True, separator=" ")]
    comments.append(result)
quotes = []
for item in soup.findAll('div',attrs={"class":"panel alt2"}):
    result = [item.get_text(strip=True, separator=" ")]
    quotes.append(result)

Для окончательного результата я не хочу, чтобы данные из списка котировок были включены в мои комментарии. Я пытался использовать if, но это дает неверный результат.

Пример комментариев [6] дает ниже результат

'Quote: Originally Posted by jeff_the_pilot What the difference between adaptive cruise control on 2018 versus 2017? I believe mine brakes if I encroach another vehicle. It will work in stop and go traffic!'

мой ожидаемый результат

It will work in stop and go traffic!

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Получать все сообщения без кавычек:

import requests
from bs4 import BeautifulSoup

url = "https://www.f150forum.com/f118/do-all-2018-f150-trucks-come-adaptive-cruise-control-369065/index2/"

soup = BeautifulSoup(requests.get(url).content, 'html.parser')

msgs = []
for msg in soup.select('[id^="post_message_"]'):
    for div in msg.select('div:has(> div > label:contains("Quote:"))'):
        div.extract()
    msgs.append( msg.get_text(strip=True, separator='\n') )

#print(msgs) # <-- uncomment to see all messages without Quoted messages

print(msgs[6])

Отпечатки:

It will work in stop and go traffic!
0 голосов
/ 21 января 2020

Вам нужно добавить несколько логик c, чтобы убрать текст, содержащийся в div с классом panel alt2:

comments =[]
for item in comments_lst:
    result = [item.get_text(strip=True, separator=" ")]
    if div := item.find('div', class_="panel alt2"):
        result[0] = ' '.join(result[0].split(div.text.split()[-1])[1:])
    comments.append(result)

>>> comments[6]
[' It will work in stop and go traffic!']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...