Найти и получить содержимое из HTML-текста, используя BeautifulSoup - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть следующий html-код (или, по крайней мере, я думаю, что это html), над которым я работаю с BeautifulSoup на Python.

Я правильно проанализировал html, используя Beautiful soup. Далее я хотел бы получить содержимое, связанное с элементом div, содержащим определенную метку данных (например, в нижней части кода, data-label = "Relation"). В частности, я хотел бы получить словарь, который имеет в качестве ключа текст метки данных, т.е. в моем примере «Отношение», и в качестве значения содержимое того же «div», т.е. в моем примере href »http://documenti.camera.it/apps/commonServices/getDocumento.ashx?sezione=bollettini=comunicato=17=2016=06=14=03=data.20160614.com03.bollettino.sede00020.tit00010.int00010=data.20160614.com03.bollettino.sede00020.tit00010.int00010#data.20160614.com03.bollettino.sede00020.tit00010.int00010"

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

(Обратите внимание, что это всего лишь пример, но мне придется сделать то же самое для тысяч, если не миллионов, таких веб-страниц с такой же структурой).

Любая помощь приветствуется. Спасибо!

<div id="directs">
  <label class="c1"><a data-comment="A human-readable name for the subject." data-label="label" href="http://www.w3.org/2000/01/rdf-schema#label">
    rdfs:<span>label</span>
    </a></label>
  <div class="c2 value ">
    <div class="toMultiLine ">
      <div class="fixed">
        <span class="dType">xsd:string</span> 
        intervento di Fabrizio CICCHITTO
      </div>
    </div>
  </div>
  <label class="c1"><a data-comment="A name given to the resource." data-label="Title" href="http://purl.org/dc/elements/1.1/title">
      dc:<span>title</span>
    </a></label>
  <div class="c2 value ">
    <div class="toMultiLine ">
      <div class="fixed">
        intervento di Fabrizio CICCHITTO
      </div>
    </div>
  </div>
  <label class="c1"><a data-comment="" data-label="" href="http://lod.xdams.org/ontologies/ods/modified">
      ods:<span>modified</span>
    </a></label>
  <div class="c2 value ">
    <div class="toMultiLine ">
      <div class="fixed">
        <span class="dType">xsd:dateTime</span> 
        2016-07-05T12:26:02Z
      </div>
    </div>
  </div>
  <label class="c1"><a data-comment="The subject is an instance of a class." data-label="type" href="http://www.w3.org/1999/02/22-rdf-syntax-ns#type">
      rdf:<span>type</span>
    </a></label>
  <div class="c2 value">
    <div class="toOneLine">
      <a class=" isLocal" href="http://dati.camera.it/ocd/intervento" title="&lt;http://dati.camera.it/ocd/intervento&gt;">
      ocd:intervento
      </a>
    </div>
  </div>
  <label class="c1"><a data-comment="propriet generica utilizzata per puntare alla risorsa deputato in vari punti dell'ontologia" data-label="rierimento a deputato" href="http://dati.camera.it/ocd/rif_deputato">
      ocd:<span>rif_deputato</span>
    </a></label>
  <div class="c2 value">
    <div class="toOneLine">
      <a class=" isLocal" href="http://dati.camera.it/ocd/deputato.rdf/d15080_17" title="&lt;http://dati.camera.it/ocd/deputato.rdf/d15080_17&gt;">
      http://dati.camera.it/ocd/deputato.rdf/d15080_17
      </a>
    </div>
  </div>
  <label class="c1"><a data-comment="A related resource." data-label="Relation" href="http://purl.org/dc/elements/1.1/relation">
      dc:<span>relation</span>
    </a></label>
  <div class="c2 value">
    <div class="toOneLine">
      <a class=" " href="http://documenti.camera.it/apps/commonServices/getDocumento.ashx?sezione=bollettini=comunicato=17=2016=06=14=03=data.20160614.com03.bollettino.sede00020.tit00010.int00010=data.20160614.com03.bollettino.sede00020.tit00010.int00010#data.20160614.com03.bollettino.sede00020.tit00010.int00010"
        target="_blank" title="&lt;http://documenti.camera.it/apps/commonServices/getDocumento.ashx?sezione=bollettini=comunicato=17=2016=06=14=03=data.20160614.com03.bollettino.sede00020.tit00010.int00010=data.20160614.com03.bollettino.sede00020.tit00010.int00010#data.20160614.com03.bollettino.sede00020.tit00010.int00010&gt;">
         http://documenti.camera.it/apps/commonServices/getDocumento.ashx?sezione=bollettini=comunicato=17=2016=06=14=03=data.20160614.com03.bollettino.sede00020.tit00010.int00010=data.20160614.com03.bollettino.sede00020.tit00010.int00010#data.20160614.com03.bollettino.sede00020.tit00010.int00010
        </a>
    </div>
  </div>
</div>

1 Ответ

0 голосов
/ 10 ноября 2018

Вы можете найти data-labels в одном проходе и содержание div в другом. Затем результаты можно сжать вместе для создания словаря:

from bs4 import BeautifulSoup as soup
import re
d = soup(content, 'html.parser').find('div', {'id':'directs'})
_labels = [i.a['data-label'] for i in d.find_all('label')]
_content = [i.text for i in d.find_all('div', {'class':re.compile('c2 value\s*')})]
result = dict(zip(_labels, _content))

Выход:

{'label': '\n\n\nxsd:string \n        intervento di Fabrizio CICCHITTO\n      \n\n', 
 'Title': '\n\n\n        intervento di Fabrizio CICCHITTO\n      \n\n', 
 '': '\n\n\nxsd:dateTime \n        2016-07-05T12:26:02Z\n      \n\n', 
 'type': '\n\n\n      ocd:intervento\n      \n\n', 
 'rierimento a deputato': '\n\n\n      http://dati.camera.it/ocd/deputato.rdf/d15080_17\n      \n\n', 
  'Relation': '\n\n\n         http://documenti.camera.it/apps/commonServices/getDocumento.ashx?sezione=bollettini=comunicato=17=2016=06=14=03=data.20160614.com03.bollettino.sede00020.tit00010.int00010=data.20160614.com03.bollettino.sede00020.tit00010.int00010#data.20160614.com03.bollettino.sede00020.tit00010.int00010\n        \n\n'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...