python - 如何合并重复的列以获得多行而不是多列或逗号分隔的数据到单个单元格中?
问题描述
我正在从 javascript 环境中抓取数据,并希望将预设的列作为输出,这些列中的多行填充了我从数据抓取中获得的值。如何将找到的值与预定义的列相关联,或者如何将具有相同名称的列合并到多行数据?
我正在抓取的数据是一个司法法院判决的数据库,它是公开的。
我研究了如何在 Pandas DataFrame 中合并列,但迄今为止最好的输出是合并它们并获得逗号分隔的数据,这对我的抓取目的毫无用处。
MWE:
from selenium import webdriver
from bs4 import BeautifulSoup
from openpyxl import Workbook
import numpy as np
import pandas as pd
url = "https://scon.stj.jus.br/SCON/legaplic/toc.jsp?materia=%27Lei+8.429%2F1992+%28Lei+DE+IMPROBIDADE+ADMINISTRATIVA%29%27.mat.&b=TEMA&p=true&t=&l=1&i=18&ordem=MAT,@NUM"
driver = webdriver.Firefox()
driver.implicitly_wait(30)
driver.get(url)
python_button = driver.find_element_by_xpath('/html/body/div[2]/div[6]/div/div/div[3]/div[2]/div/div/div/div[16]/a')
python_button.click()
driver.switch_to.window(driver.window_handles[-1])
python_button = driver.find_element_by_xpath('/html/body/div[2]/div[6]/div[1]/div/div[3]/div[2]/div/div/div/div[3]/div[2]/span[2]/a')
python_button.click()
driver.switch_to.window(driver.window_handles[-1])
textList = driver.find_elements_by_class_name("docTexto")
resultados = BeautifulSoup(driver.page_source, 'lxml')
parse = resultados.find('div', {'id':'listadocumentos'})
paragrafoBRS = parse.find_all('div',{'class':'paragrafoBRS'})
python_button = driver.find_element_by_xpath('/html/body/div[2]/div[6]/div/div/div[3]/div[2]/div/div/div/form/div/a[2]')
python_button.click()
textList2 = driver.find_elements_by_class_name("docTexto")
resultados2 = BeautifulSoup(driver.page_source, 'lxml')
parse = resultados2.find('div', {'id':'listadocumentos'})
paragrafoBRS2 = parse.find_all('div',{'class':'paragrafoBRS'})
python_button = driver.find_element_by_xpath('/html/body/div[2]/div[6]/div/div/div[3]/div[2]/div/div/div/form/div/a[4]')
python_button.click()
textList3 = driver.find_elements_by_class_name("docTexto")
resultados3 = BeautifulSoup(driver.page_source, 'lxml')
parse = resultados3.find('div', {'id':'listadocumentos'})
paragrafoBRS3 = parse.find_all('div',{'class':'paragrafoBRS'})
python_button = driver.find_element_by_xpath('/html/body/div[2]/div[6]/div/div/div[3]/div[2]/div/div/div/form/div/a[4]')
python_button.click()
textList4 = driver.find_elements_by_class_name("docTexto")
resultados4 = BeautifulSoup(driver.page_source, 'lxml')
parse = resultados4.find('div', {'id':'listadocumentos'})
paragrafoBRS4 = parse.find_all('div',{'class':'paragrafoBRS'})
python_button = driver.find_element_by_xpath('/html/body/div[2]/div[6]/div/div/div[3]/div[2]/div/div/div/form/div/a[4]')
python_button.click()
textList5 = driver.find_elements_by_class_name("docTexto")
resultados5 = BeautifulSoup(driver.page_source, 'lxml')
parse = resultados5.find('div', {'id':'listadocumentos'})
paragrafoBRS5 = parse.find_all('div',{'class':'paragrafoBRS'})
header = []
content = []
for each in paragrafoBRS:
header.append(each.find('h4', {'class':'docTitulo'}).text.strip())
content.append(each.find(['div','pre'], {'class':'docTexto'}).text.strip())
for each in paragrafoBRS2:
header.append(each.find('h4', {'class':'docTitulo'}).text.strip())
content.append(each.find(['div','pre'], {'class':'docTexto'}).text.strip())
for each in paragrafoBRS3:
header.append(each.find('h4', {'class':'docTitulo'}).text.strip())
content.append(each.find(['div','pre'], {'class':'docTexto'}).text.strip())
for each in paragrafoBRS4:
header.append(each.find('h4', {'class':'docTitulo'}).text.strip())
content.append(each.find(['div','pre'], {'class':'docTexto'}).text.strip())
for each in paragrafoBRS5:
header.append(each.find('h4', {'class':'docTitulo'}).text.strip())
content.append(each.find(['div','pre'], {'class':'docTexto'}).text.strip())
df = pd.DataFrame([content], columns = header)
df.to_excel('dados.xlsx')
driver.quit()
我希望将数据抓取到具有以下列的 Excel DataFrame:
- 进程
- 关系人(一)
- Órgão Julgador
- 数据做胡尔加门托
- Data da Publicação/Fonte
- 埃门塔
- 手风琴
- 信息补充 à Ementa (ICE)
- 参考立法
- 法律法规
- 类似的Acórdãos
每行将代表从 javascript 环境中获得的决策数据库中的一个文档。
当我得到这个输出时,我还希望我得到用相关列填充的单元格,当该列没有数据时,得到一个 NaN 结果,保留文档行。
实际输出是一个 Excel DataFrame,它有 391 列,而不是 11 列,1 行数据,重复上述列 41 次。
下面的代码演示了有关文档 1 的信息,您可以通过 h3 id "DOC1" 看到。
我希望每个 DOC 都匹配一行。
您还可以看到,docTitulo 对应于列名,docTexto 对应于行的内容。
<div style="position: relative;">
<h3><a href="javascript:;" id="DOC1">Documento 1</a></h3>
</div>
<div class="paragrafoBRS">
<h4 class="docTitulo">Processo</h4>
<div class="docTexto">
AgInt no AREsp 739451 / RJ<br>AGRAVO INTERNO NO AGRAVO EM RECURSO ESPECIAL<br>2015/0161439-6
</div>
</div>
<div class="paragrafoBRS">
<h4 class="docTitulo">Relator(a)</h4>
<pre class="docTexto">Ministro BENEDITO GONÇALVES (1142)</pre>
</div>
<div class="paragrafoBRS">
<h4 class="docTitulo">Órgão Julgador</h4>
<pre class="docTexto">T1 - PRIMEIRA TURMA</pre>
</div>
<div class="paragrafoBRS">
<h4 class="docTitulo">Data do Julgamento</h4>
<pre class="docTexto">26/02/2019</pre>
</div>
<div class="paragrafoBRS">
<h4 class="docTitulo">Data da Publicação/Fonte</h4>
<pre class="docTexto">DJe 26/03/2019</pre>
</div>
<div class="paragrafoBRS">
<a name="EMEN"></a>
<h4 class="docTitulo">Ementa</h4>
<pre class="docTexto">PROCESSO CIVIL. AGRAVO INTERNO NO AGRAVO EM RECURSO ESPECIAL.
VIOLAÇÃO DO ART. 535 DO CPC/1973. AUSÊNCIA DE ARGUMENTAÇÃO. SÚMULA
284/STF. DEFICIÊNCIA NA ARGUMENTAÇÃO RECURSAL.SÚMULA 284/STF. AÇÃO
CIVIL PÚBLICA POR ATO DE IMPROBIDADE ADMINISTRATIVA. RECEBIMENTO DA
PETIÇÃO INICIAL. ANÁLISE DO ELEMENTO SUBJETIVO. NECESSIDADE DE
INSTRUÇÃO PROCESSUAL. PRESENÇA DE INDÍCIOS DE ATO DE IMPROBIDADE
ADMINISTRATIVA EXPRESSAMENTE RECONHECIDOS PELO TRIBUNAL DE ORIGEM.
REEXAME DE MATÉRIA FÁTICO PROBATÓRIA. IMPOSSIBILIDADE. SÚMULA 7/STJ.
1. O recurso não demonstra, com transparência e precisão, qual seria
o ponto omisso, contraditório ou obscuro do acórdão recorrido, não
se conhecendo da alegada violação do art. 535 do CPC/1973.
Incidência, por analogia, do entendimento da Súmula 284/STF.
2. Aplica-se a Súmula 284/STF quanto à alegada violação dos arts.
9º, 10, 11 e 17, § 6º, da Lei nº 8.429/1992, tendo em vista que não
desenvolveu a parte agravante argumentos para demonstrar de que modo
tais dispositivos foram ofendidos.
3. O indeferimento da petição inicial da ação civil de improbidade
administrativa somente é cabível nos casos que o magistrado entender
inexistente o suposto ato de improbidade, da improcedência da ação
ou a inadequação da via eleita, hipóteses não configuradas no caso
concreto.
4. Rever o entendimento do acórdão recorrido ensejaria o reexame do
conjunto fático-probatório da demanda, providência vedada em sede de
recurso especial, ante a Súmula 7/STJ.
5. Agravo interno não provido.</pre>
</div>
<div class="paragrafoBRS">
<h4 class="docTitulo">Acórdão</h4>
<pre class="docTexto">Vistos, relatados e discutidos os autos em que são partes as acima
indicadas, acordam os Ministros da Primeira Turma do Superior
Tribunal de Justiça prosseguindo o julgamento, por maioria, vencido
o Sr. Ministro Napoleão Nunes Maia Filho, negar provimento ao agravo
interno, nos termos do voto-vista do Sr. Ministro Relator. Os Srs.
Ministros Sérgio Kukina, Regina Helena Costa (Presidente) e Gurgel
de Faria votaram com o Sr. Ministro Relator.</pre>
</div>
<div class="paragrafoBRS">
<h4 class="docTitulo" onmouseover="mostra_help('Indexacao1')" onmouseout="esconde_help('Indexacao1');" style="cursor: pointer; text-decoration: underline;">Informações Complementares à Ementa (ICE)</h4>
<div id="helpIndexacao1" class="helpbox" style="display: none">
<object data="/docs_internet/jurisprudencia/ajuda/TextoInformacoesAdicionais.htm" class="tpin6"></object>
</div>
<pre class="docTexto"> "A conclusão alcançada pela Corte a quo está em consonância com
a orientação deste Tribunal Superior sobre o tema, a qual autoriza o
recebimento da petição inicial da ação civil de improbidade
administrativa, na hipótese da presença de indícios de cometimento
de atos enquadrados na Lei de Improbidade Administrativa. Com
efeito, na fase inicial prevista no art. 17 e §§ 7º, 8º e 9º, da Lei
nº 8.429/1992, vigora o princípio do in dubio pro societate, a fim
de possibilitar o maior resguardo do interesse público".
"[...], deve ser considerada prematura a extinção do processo
com julgamento de mérito, tendo em vista não existirem elementos
fáticos ou probatório suficientes para um juízo conclusivo acerca da
demanda, tampouco quanto a efetiva presença do elemento subjetivo do
suposto ato de improbidade administrativa, o qual exige, em regra, a
regular instrução processual".
(VOTO VENCIDO) (MIN. NAPOLEÃO NUNES MAIA FILHO)
"Verdadeiramente, é preciso que o libelo acusatório, assim como
as decisões judiciais que venham a permitir o trâmite das ações
sancionadoras, apontem com precisão os indícios mínimos da autoria,
cumplicidade, participação, ainda que de somenos importância. Daí
porque a expressão in dubio pro societate, cuja origem é
desconhecida, deveria ser banida das decisões que tratam da fase
inaugural das ações de improbidade, por nada dizer a respeito da
potencial autoria do fato que se repute ímprobo".</pre>
</div>
<div class="paragrafoBRS">
<h4 class="docTitulo"
onmouseover="mostra_help('ReferenciasLegislativas1')"
onmouseout="esconde_help('ReferenciasLegislativas1');"
style="cursor: pointer; text-decoration: underline;">Referência Legislativa</h4>
<div id="helpReferenciasLegislativas1" class="helpbox" style="display: none">
<object data="/docs_internet/jurisprudencia/ajuda/TextoReferenciasLegislativas.htm" class="helpReferenciasLegislativas"></object>
</div>
<pre class="docTexto"><a target="_blank" href="/SCON/include/linkPlanalto.jsp?tipo=LEI&numero=005869&ano=1973">LEG:FED <span class="tooltip">LEI<span class="tooltiptext">LEI ORDINÁRIA</span></span>:005869 ANO:1973</a><br>***** CPC-73 CÓDIGO DE PROCESSO CIVIL DE 1973<br> ART:00535<br><br>LEG:FED <span class="tooltip">SUM<span class="tooltiptext">SÚMULA</span></span>:****** ANO:****<br>***** SUM(STF) SÚMULA DO SUPREMO TRIBUNAL FEDERAL<br> SUM:000284<br><br><a target="_blank" href="/SCON/include/linkPlanalto.jsp?tipo=LEI&numero=008429&ano=1992">LEG:FED <span class=highlightBrs>LEI:008429</span> ANO:1992</a><br>***** LIA-92 <span class=highlightBrs>LEI DE IMPROBIDADE</span> ADMINISTRATIVA<br> ART:00009 <span class=highlightBrs>ART:00010 ART:00011 ART:00017 PAR:00006</span><br> PAR:00007 PAR:00008 PAR:00009<br><br>LEG:FED <span class="tooltip">SUM<span class="tooltiptext">SÚMULA</span></span>:****** ANO:****<br>***** SUM(STJ) SÚMULA DO SUPERIOR TRIBUNAL DE JUSTIÇA<br> <a href="javascript:AbrirDocumento('/SCON/sumanot/toc.jsp?livre=(sumula+adj+7).sub.','SU');" >SUM:000007</a></pre>
</div>
<div class="paragrafoBRS">
<h4 class="docTitulo" onmouseover="mostra_help('Veja1')"
onmouseout="esconde_help('Veja1');" style="cursor: pointer; text-decoration: underline;">Jurisprudência Citada</h4>
<div id="helpVeja1" class="helpbox" style="display: none">
<object data="/docs_internet/jurisprudencia/ajuda/TextoVeja.htm" class="helpVeja"></object>
</div>
<pre class="docTexto">(PROCESSUAL CIVIL - AÇÃO DE IMPROBIDADE ADMINISTRATIVA -<br>INDEFERIMENTO DA PETIÇÃO INICIAL - HIPÓTESES)<br> STJ - <a href="/SCON/jurisprudencia/toc.jsp?i=1&b=ACOR&livre=(('AINTARESP'.clas.+e+@num='910840')+ou+('AGINT NO ARESP'+adj+'910840'.suce.))&thesaurus=JURIDICO&fr=veja" class="">AgInt no AREsp 910840</a>-RN, <a href="/SCON/jurisprudencia/toc.jsp?i=1&b=ACOR&livre=(('RESP'.clap.+e+@num='1192758')+ou+('RESP'+adj+'1192758'.suce.))&thesaurus=JURIDICO&fr=veja" class="">REsp 1192758</a>-MG<br>(PROCESSUAL CIVIL - AÇÃO DE IMPROBIDADE ADMINISTRATIVA - PREMATURA<br>EXTINÇÃO DO PROCESSO COM JULGAMENTO DE MÉRITO - NECESSIDADE DA<br>INSTRUÇÃO PROCESSUAL)<br> STJ - <a href="/SCON/jurisprudencia/toc.jsp?i=1&b=ACOR&livre=(('AIEDARESP'.clas.+e+@num='925670')+ou+('AGINT NOS EDCL NO ARESP'+adj+'925670'.suce.))&thesaurus=JURIDICO&fr=veja" class="">AgInt nos EDcl no AREsp 925670</a>-MG,<br> <a href="/SCON/jurisprudencia/toc.jsp?i=1&b=ACOR&livre=(('AGARESP'.clas.+e+@num='400779')+ou+('AGRG NO ARESP'+adj+'400779'.suce.))&thesaurus=JURIDICO&fr=veja" class="">AgRg no AREsp 400779</a>-ES<br>(PROCESSUAL CIVIL - AÇÃO DE IMPROBIDADE ADMINISTRATIVA - PRESENÇA DE<br>INDÍCIOS DE PRÁTICA DE ATO DE IMPROBIDADE - REEXAME DE PROVA)<br> STJ - <a href="/SCON/jurisprudencia/toc.jsp?i=1&b=ACOR&livre=(('AGARESP'.clas.+e+@num='706071')+ou+('AGRG NO ARESP'+adj+'706071'.suce.))&thesaurus=JURIDICO&fr=veja" class="">AgRg no AREsp 706071</a>-SP, <a href="/SCON/jurisprudencia/toc.jsp?i=1&b=ACOR&livre=(('AGRESP'.clas.+e+@num='1281089')+ou+('AGRG NO RESP'+adj+'1281089'.suce.))&thesaurus=JURIDICO&fr=veja" class="">AgRg no REsp 1281089</a>-MG</pre>
</div>
</div>
<hr>
解决方案
推荐阅读
- python - 删除重复项并过滤数据框
- java - 当另一个片段中的按钮尝试打开它时,时间选择器对话框会导致应用程序崩溃
- batch-file - 循环通过批处理文件中的输入参数
- javascript - 将 Vue/Angular 等 js 库与其他 javascript 资产相结合?
- python - 替换和扁平化 Numpy 数组
- javascript - 当 var 为 true 时,VueJS 会阻止对变量元素进行制表符
- azure - Azure 数据工厂 - 同步调用逻辑应用
- selenium - 使用 Selenium 和 IE 和 IEdriverServer 的自动化测试问题
- c++ - 从字符串中删除多余的空格
- php - Laravel 雄辩的 find() 具有自定义主键返回未找到