очистить таблицу, сгенерированную скриптом - PullRequest
0 голосов
/ 27 мая 2018

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

<table class="table table-compact table-striped table-topics">
            <thead>
                <tr>
                    <th data-intro="Clicking a topic will allow you to view and ask general technical questions about the topic through SITIS." data-position="bottom">Topic #</th>
                    <th>Program</th>
                    <th>Component</th>
                    <th>Technology Area</th>
                    <th>Title</th>
                    <th data-intro="If there is SITIS activity for a topic a clickable 'QA' will appear in this column." data-position="bottom">SITIS</th>
                </tr>
            </thead>
            <tbody>
                {{#each this.Results}}
                <tr>
                    <td><a href="/topics?topicId={{this.TopicId}}" target="_blank" data-topicid="{{this.TopicId}}">{{this.TopicNumber}}</a></td>
                    <td>{{this.ProgramTypeName}}</td>
                    <td>{{this.AgencyName}}</td>
                    <td>

                      <div class="icons">
                        {{#if this.TechAreaAirPlatform}}
                          <i class="glyph-icon flaticon-air-platform" data-toggle="tooltip" title="Technology Area: Air Platform"></i>
                        {{/if}}
                        {{#if this.TechAreaChemBioDefense }}
                          <i class="glyph-icon flaticon-chem-bio-defense" data-toggle="tooltip" title="Technology Area: Chem Bio Defense"></i>
                        {{/if}}
                        {{#if this.TechAreaInfoSystems}}
                          <i class="glyph-icon flaticon-info-systems" data-toggle="tooltip" title="Technology Area: Info Systems"></i>
                        {{/if}}
                        {{#if this.TechAreaGroundSea }}
                          <i class="glyph-icon flaticon-ground-sea" data-toggle="tooltip" title="Technology Area: Ground Sea"></i>
                        {{/if}}
                        {{#if this.TechAreaMaterials}}
                          <i class="glyph-icon flaticon-materials" data-toggle="tooltip" title="Technology Area: Materials"></i>
                        {{/if}}
                        {{#if this.TechAreaBioMedical }}
                          <i class="glyph-icon flaticon-bio-med" data-toggle="tooltip" title="Technology Area: Bio Medical"></i>
                        {{/if}}
                        {{#if this.TechAreaSensors }}
                          <i class="glyph-icon flaticon-sensors" data-toggle="tooltip" title="Technology Area: Sensors"></i>
                        {{/if}}
                        {{#if this.TechAreaElectronics }}
                          <i class="glyph-icon flaticon-electronics" data-toggle="tooltip" title="Technology Area: Electronics"></i>
                        {{/if}}
                        {{#if this.TechAreaBattlespace }}
                          <i class="glyph-icon flaticon-battlespace" data-toggle="tooltip" title="Technology Area: Battlespace"></i>
                        {{/if}}
                        {{#if this.TechAreaSpacePlatforms }}
                          <i class="glyph-icon flaticon-space-platform" data-toggle="tooltip" title="Technology Area: Space Platforms"></i>
                        {{/if}}
                          {{#if this.TechAreaHumanSystems }}
                          <i class="glyph-icon flaticon-human-systems" data-toggle="tooltip" title="Technology Area: Human Systems"></i>
                        {{/if}}
                        {{#if this.TechAreaWeapons }} 
                          <i class="glyph-icon flaticon-weapons" data-toggle="tooltip" title="Technology Area: Weapons"></i>
                        {{/if}}
                        {{#if this.TechAreaNuclear }}
                          <i class="glyph-icon flaticon-nuclear" data-toggle="tooltip" title="Technology Area: Nuclear"></i>
                        {{/if}}
                      </div>
                    </td>
                    <td><a href="/topics?topicId={{this.TopicId}}" target="_blank" data-topicid="{{this.TopicId}}">{{this.TopicTitle}}</a></td>
                    <td>{{#if this.PublishedQuestionCount}}<a href="/topics?topicId={{this.TopicId}}" target="_blank" data-topicid="{{this.TopicId}}">Q&A</a>{{/if}}</td>
                </tr>
                {{else}}
                <tr>
                    <td colspan="6"><div class="alert alert-warning">No topics were found.</div></td>
                </tr>
                {{/each}}
            </tbody>
        </table>

Мне было интересно, знает ли кто-нибудь, можно ли по-прежнему очищать таблицу.сразу за таблицей стоит тег сценария, который мне хотелось бы знать, пригодится ли он.

<script id="topics-template" type="text/x-handlebars-template">

Заранее спасибо!

1 Ответ

0 голосов
/ 08 января 2019

Предложение в комментариях использовать selenium WebDriver, вероятно, является самым простым решением для вашей проблемы.Похоже, вы пытаетесь очистить сайт, который динамически генерирует контент, с помощью шаблонов Django или чего-то подобного.

Таким образом, вам нужно эмулировать браузер, чтобы фактически загрузить весь контент на странице, поскольку в настоящее время вы получаете только статический HTML.Вы можете установить selenium с помощью менеджера пакетов, затем вам нужно установить драйвер для браузера, который вы хотите олицетворять:

pip install selenium
pip install chromedriver

Примечание: не все веб-драйверы могут быть установлены с вашим менеджером пакетов (я нея думаю, что вам, возможно, придется загрузить его из обычного Интернета.

Теперь вы можете использовать что-то вроде этой функции, которую я написал, чтобы очистить нужную страницу:

# purpose: a function which takes a url and extracts the contents as a string
# depends on selenium webdriver to turn js-scripts into html as well as time and os libraries
# signature: pull_html_page(url:string, write:optional boolean) -> string 
def pull_html_page(url, write = False):

    driver = webdriver.Chrome()
    driver.get(url)
    time.sleep(1)
    content = driver.page_source.encode('utf-8')

    driver.quit()


    if write == True:
        # the "my dick computer won't let me be root" workaround
        if os.geteuid() == 0:
            print("We're root!")
        else:
            print("We're not root.")
            CURRENT_SCRIPT = os.path.realpath(__file__)
            os.system('echo ' + PASSWORD_FOR_SUDO + '|sudo -S python '+ CURRENT_SCRIPT)

            clean = BeautifulSoup(content, "html.parser").prettify()

            f = open("out.html", "w+")
            f.write(clean)
            f.close()

    return content

Еслиэто решение недостаточно эффективно для вас, или вам нужны только динамически генерируемые данные и ничего из статического html.Вы часто можете использовать свой инструмент проверки (я предпочитаю тот, что на Chrome), чтобы увидеть сетевой трафик.Иногда вы можете увидеть URL-адрес, возвращающий ответ JSON, это сэкономит вам время загрузки страницы, и вы сможете очистить данные непосредственно из URL-адреса ответа.

удачи!

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