在python3中,我想从website中提取表的所有文本内容。但是,信息的组织方式不是使用常规表,而是使用tr,td和span
该信息位于屏幕上的“Movimentações”块中
开始提取程序:
import requests
from bs4 import BeautifulSoup
import urllib3; urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
res = requests.get("https://esaj.tjsp.jus.br/cpopg/show.do?processo.codigo=2S000YR9Q0000&processo.foro=100&paginaConsulta=2&conversationId=&dadosConsulta.localPesquisa.cdLocal=100&cbPesquisa=NMPARTE&dadosConsulta.tipoNuProcesso=UNIFICADO&dadosConsulta.valorConsulta=Google&uuidCaptcha=&pbEnviar=Pesquisar", verify=False)
soup = BeautifulSoup(res.content,'lxml')
# I get a numeric code to organize what will be extracted
num_processo = soup.select_one('td:has(>.labelClass:contains("Processo:")) + td').text.strip() if soup.select_one('td:has(>.labelClass:contains("Assunto:")) + td') is not None else 'N/A'
# This is where the table is
table = soup.find_all("tbody",{"id":"tabelaUltimasMovimentacoes"})
我只想提取行中的所有文本并像这样进行组织(以第一行为例):
[{"num_processo": num_processo,
"text": "22/04/2019 Certidão de Publicação Expedida
Relação :0130/2019 Data da Disponibilização: 22/04/2019 Data da Publicação: 23/04/2019 Número do Diário: 2792 Página: 402/420
16/04/2019 Remetido ao DJE
Relação: 0130/2019 Teor do ato: Ante o exposto, julgo PROCEDENTES os pedidos, com resolução do mérito, nos termos do artigo 487, inciso I, do Código de Processo Civil, para que procedam as requeridas GOOGLE e FACEBOOK, respectivamente, à remoção da página sustentadas nas URL https://www.youtube.com/channel/UCOMI2Kd2YtfpicY5UJXiXhg e https://www.facebook.com/leiamirandaoficial1/, bem como forneça os IPs sob sua guarda, dos usuários responsáveis pela criação e acessos administrativos das páginas, com a identificação da data e horário destes, confirmando a tutela de urgência. Cada parte arcará com os honorários advocatícios de seus próprios patronos e com as custas e despesas a que estão ordinariamente obrigadas, ante a ausência de pretensão resistida, pois necessária a intervenção judicial, como acima delineado. Transitada em julgado, ao arquivo, dando-se baixa na distribuição. P.I.C. Advogados(s): Celso de Faria Monteiro (OAB 138436/SP), Fabio Rivelli (OAB 297608/SP), Rafael Gomes Anastacio (OAB 320579/SP)
09/04/2019 Julgada Procedente a Ação
Ante o exposto, julgo PROCEDENTES os pedidos, com resolução do mérito, nos termos do artigo 487, inciso I, do Código de Processo Civil, para que procedam as requeridas GOOGLE e FACEBOOK, respectivamente, à remoção da página sustentadas nas URL https://www.youtube.com/channel/UCOMI2Kd2YtfpicY5UJXiXhg e https://www.facebook.com/leiamirandaoficial1/, bem como forneça os IPs sob sua guarda, dos usuários responsáveis pela criação e acessos administrativos das páginas, com a identificação da data e horário destes, confirmando a tutela de urgência. Cada parte arcará com os honorários advocatícios de seus próprios patronos e com as custas e despesas a que estão ordinariamente obrigadas, ante a ausência de pretensão resistida, pois necessária a intervenção judicial, como acima delineado. Transitada em julgado, ao arquivo, dando-se baixa na distribuição. P.I.C.
09/04/2019 Conclusos para Sentença
08/04/2019 Petição Juntada
Nº Protocolo: WJMJ.19.40477877-0 Tipo da Petição: Petições Diversas Data: 08/04/2019 15:22
08/04/2019 Conclusos para Despacho
03/04/2019 Petição Juntada
Nº Protocolo: WJMJ.19.40451659-7 Tipo da Petição: Petições Diversas Data: 03/04/2019 13:22"}]'
“ tabelaUltimasMovimentacoes”中的部分HTML代码
<tbody id="tabelaUltimasMovimentacoes">
<tr class="fundoClaro" style="">
<td style="vertical-align: top" width="120">
22/04/2019
</td>
<td aria-hidden="true" valign="top" width="20">
</td>
<td style="vertical-align: top; padding-bottom: 5px">
Certidão de Publicação Expedida
<br/>
<span style="font-style: italic;">
Relação :0130/2019
Data da Disponibilização: 22/04/2019
Data da Publicação: 23/04/2019
Número do Diário: 2792
Página: 402/420
</span>
</td>
</tr>
<tr class="fundoEscuro" style="">
<td style="vertical-align: top" width="120">
16/04/2019
</td>
<td aria-hidden="true" valign="top" width="20">
</td>
<td style="vertical-align: top; padding-bottom: 5px">
Remetido ao DJE
<br/>
<span style="font-style: italic;">
Relação: 0130/2019
Teor do ato: Ante o exposto, julgo PROCEDENTES os pedidos, com resolução do mérito, nos termos do artigo 487, inciso I, do Código de Processo Civil, para que procedam as requeridas GOOGLE e FACEBOOK, respectivamente, à remoção da página sustentadas nas URL https://www.youtube.com/channel/UCOMI2Kd2YtfpicY5UJXiXhg e https://www.facebook.com/leiamirandaoficial1/, bem como forneça os IPs sob sua guarda, dos usuários responsáveis pela criação e acessos administrativos das páginas, com a identificação da data e horário destes, confirmando a tutela de urgência. Cada parte arcará com os honorários advocatícios de seus próprios patronos e com as custas e despesas a que estão ordinariamente obrigadas, ante a ausência de pretensão resistida, pois necessária a intervenção judicial, como acima delineado. Transitada em julgado, ao arquivo, dando-se baixa na distribuição. P.I.C.
Advogados(s): Celso de Faria Monteiro (OAB 138436/SP), Fabio Rivelli (OAB 297608/SP), Rafael Gomes Anastacio (OAB 320579/SP)
</span>
</td>
</tr>
请,有人知道我如何提取所有文本并创建字典?
答案 0 :(得分:1)
这有点hack'y,但是使用请求将html传递给熊猫以提取表格。然后在桌子上洗一些化妆品。
import pandas as pd
import requests
import urllib3; urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
pd.options.mode.chained_assignment = None
r = requests.get('https://esaj.tjsp.jus.br/cpopg/show.do?processo.codigo=2S000YR9Q0000&processo.foro=100&paginaConsulta=2&conversationId=&dadosConsulta.localPesquisa.cdLocal=100&cbPesquisa=NMPARTE&dadosConsulta.tipoNuProcesso=UNIFICADO&dadosConsulta.valorConsulta=Google&uuidCaptcha=&pbEnviar=Pesquisar', verify = False)
tables = pd.read_html(r.content)
result = tables[4].head()
result.drop(['Unnamed: 1'], axis=1, inplace = True)
print(result)
使用硒单击以显示更多:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import pandas as pd
from bs4 import BeautifulSoup as bs
url = 'https://esaj.tjsp.jus.br/cpopg/show.do?processo.codigo=2S000YR9Q0000&processo.foro=100&paginaConsulta=2&conversationId=&dadosConsulta.localPesquisa.cdLocal=100&cbPesquisa=NMPARTE&dadosConsulta.tipoNuProcesso=UNIFICADO&dadosConsulta.valorConsulta=Google&uuidCaptcha=&pbEnviar=Pesquisar'
d = webdriver.Chrome()
d.get(url)
WebDriverWait(d, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#linkmovimentacoes'))).click()
time.sleep(1)
pd.options.mode.chained_assignment = None
tables = pd.read_html(d.find_element_by_css_selector('#divLinksTituloBlocoMovimentacoes + table').get_attribute('outerHTML'))
result = tables[0]
result.drop(['Unnamed: 1'], axis=1, inplace = True)
print(result)
d.quit()