Как очистить этот текст от HTML, используя Python, Selenium и BeautifulSoup? - PullRequest
0 голосов
/ 10 февраля 2020

Я работаю над созданием инструмента для просмотра веб-страниц, который генерирует отчет .csv с использованием Python, Selenium, beautifulSoup и pandas.

К сожалению, у меня возникла проблема с извлечением текста «дата-дата» из HTML ниже. Я хочу вытащить «2/4/2020» в .csv, который генерирует мой код.

<span class="import-popover"><span id="LargeHeader_glyphStatus" class="glyphicon glyphicon-ok-sign white"></span><b><span id="LargeHeader_statusText">Processing Complete</span></b><span id="LargeHeader_dateText" data-date="2/4/2020" data-delay="1" data-step="3" data-error="False">, Last Processed 2/5/2020</span></span>

Мой сценарий python запускается со следующими данными:

from selenium import webdriver
from bs4 import BeautifulSoup as bs
import pandas as pd
driver = webdriver.Chrome('C:\chromedriver.exe')

lastdatadate=[]
lastprocesseddate=[]

Затем я захожу на веб-сайт, введите свои учетные данные un / pw и нажмите «Продолжить». Кнопка входа в систему.

Оттуда я использую следующее для анализа html, очистки веб-сайта и загрузки соответствующих данных / текста в .csv:

content = driver.page_source
soup = bs(content, 'html.parser')
for a in soup.findAll('div', attrs={'class':'large-header-welcome'}):
    datadate=a.find(?????)
    processeddate=a.find('span', attrs={'id':'LargeHeader_dateText'})
    lastdatadate.append(datadate.text)
    lastprocesseddate.append(processeddate.text)

df = pd.DataFrame({'Last Data Date':lastdatadate,'Last Processed Date':lastprocesseddate}) 
df.to_csv('hqm.csv', index=False, encoding='utf-8')

Пока что я Он работает для компонента «последняя обработанная дата» HTML, но у меня возникают проблемы с получением «последней даты данных» из HTML. Это там, я просто не знаю, как python найти его. Я пытался использовать метод поиска, но мне не удалось.

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

Любое понимание будет высоко ценится, поскольку я пытаюсь учиться и становиться лучше. Спасибо!

edit: вот более подробное описание HTML:

 <div class="large-header-welcome">
        <div class="row">
            <div class="col-sm-6">
                <h3 class="welcome-header">Welcome, <span id="LargeHeader_fullname">Rhett</span></h3>
                <p class="">
                    <b>Site:</b> <span id="LargeHeader_Name">redacted</span>
                    <br />
                    <span class="import-popover"><span id="LargeHeader_glyphStatus" class="glyphicon glyphicon-ok-sign white"></span><b><span id="LargeHeader_statusText">Processing Complete</span></b><span id="LargeHeader_dateText" data-date="2/4/2020" data-delay="1" data-step="3" data-error="False">, Last Processed 2/5/2020</span></span>
                </p>
            </div>

1 Ответ

0 голосов
/ 10 февраля 2020

Чтобы найти один элемент, используйте find ()

processeddate=soup.find('span', attrs={'id':'LargeHeader_dateText'}).text

, чтобы найти несколько элементов, используйте

for item in soup.find_all('span', attrs={'id':'LargeHeader_dateText'}):
    processeddate=item.text

Или вы можете использовать css selector select ()

for item in soup.select('#LargeHeader_dateText'):
    processeddate=item.text

РЕДАКТИРОВАТЬ

Чтобы получить значение атрибута data-date, используйте следующий код

lastdatadate=[]
for item in soup.find_all('span',attrs={"id": "LargeHeader_dateText","data-date": True}):
    processeddate=item['data-date']
    lastdatadate(processeddate)
    lastdatadate.append(processeddate)

или css селектор.

lastdatadate=[]
for item in soup.select('#LargeHeader_dateText[data-date]'):
    processeddate=item['data-date']
    print(processeddate)
    lastdatadate.append(processeddate)

Оба будут выдавать один и тот же результат. Однако позже будет выполнено более быстрое выполнение.

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