python - 如何在 Python 中从生成表格的网站进行网页抓取?

标签 python json pandas web-scraping python-requests

在Python3中,我需要抓取一个在栏菜单中有搜索选项的网站:http://www.cnj.jus.br/bnmp/#/pesquisar

我只需要选择“Estado”项目,然后选择“里约热内卢”选项(它是巴西的一个州,有几个城市)。然后点击“Pesquisar”

该网站生成一个屏幕,其中包含我需要存储在数据框中的项目(在多个页面上,每个页面上) - 53,022 个项目,例如:

Numero: "0002274-09.2012.8.19.0002.0001"
Nome: "Bruno Da Silva"
Situacao: "Aguardando Cumprimento"
Data: "23/01/2012"
Orgao: "TJRJ"

...

在以下行和页面中依此类推

使用检查元素,在网络中,我试图在 XHR 中找到具有我想要的网站 JSON 的网站,但我只找到了与里约热内卢州城市 (municipios) 的链接:

import requests
import pandas as pd

url = 'http://www.cnj.jus.br/bnmp/rest/pesquisarMunicipios/RJ'
response = requests.get(url)
print(response.json())
{'sucesso': True, 'mensagem': None, 'municipios': ['ANGRA DOS REIS', 'APERIBE', 'ARARUAMA', 'ARMACAO DOS BUZIOS', 'ARRAIAL DO CABO', 'BARRA DO PIRAI', 'BARRA MANSA', 'BELFORD ROXO', 'BOM JARDIM', 'BOM JESUS DO ITABAPOANA', 'CABO FRIO', 'CACHOEIRAS DE MACACU', 'CAMBUCI', 'CAMPOS DOS GOYTACAZES', 'CANTAGALO', 'CARAPEBUS', 'CARDOSO MOREIRA', 'CARMO', 'CASIMIRO DE ABREU', 'CONCEICAO DE MACABU', 'CORDEIRO', 'DUAS BARRAS', 'DUQUE DE CAXIAS', 'ENGENHEIRO PAULO DE FRONTIN', 'GUAPIMIRIM', 'IGUABA GRANDE', 'ITABORAI', 'ITAGUAI', 'ITALVA', 'ITAOCARA', 'ITAPERUNA', 'ITATIAIA', 'JAPERI', 'LAJE DO MURIAE', 'MACAE', 'MAGE', 'MANGARATIBA', 'MARICA', 'MENDES', 'MESQUITA', 'MIGUEL PEREIRA', 'MIRACEMA', 'NATIVIDADE', 'NILOPOLIS', 'NITEROI', 'NOVA FRIBURGO', 'NOVA IGUACU', 'PARACAMBI', 'PARAIBA DO SUL', 'PARATI', 'PATY DO ALFERES', 'PETROPOLIS', 'PINHEIRAL', 'PIRAI', 'PORCIUNCULA', 'PORTO REAL', 'QUEIMADOS', 'QUISSAMA', 'RESENDE', 'RIO BONITO', 'RIO CLARO', 'RIO DAS FLORES', 'RIO DAS OSTRAS', 'RIO DE JANEIRO', 'SANTA MARIA MADALENA', 'SANTO ANTONIO DE PADUA', 'SAO FIDELIS', 'SAO FRANCISCO DE ITABAPOANA', 'SAO GONCALO', 'SAO JOAO DA BARRA', 'SAO JOAO DE MERITI', 'SAO JOSE DO VALE DO RIO PRETO', 'SAO PEDRO DA ALDEIA', 'SAO SEBASTIAO DO ALTO', 'SAPUCAIA', 'SAQUAREMA', 'SEROPEDICA', 'SILVA JARDIM', 'SUMIDOURO', 'TERESOPOLIS', 'TRAJANO DE MORAES', 'TRAJANO DE MORAIS', 'TRES RIOS', 'VALENCA', 'VARRE-SAI', 'VASSOURAS', 'VOLTA REDONDA']}

请问有什么方法可以找到我想要抓取的项目的创建 JSON 吗?

或者有更好的抓取策略吗?

最佳答案

我能够使用 Chrome 的开发者工具网络选项卡看到正确的 XHR 请求文件。我选中了保留日志选项,所以这可能就是为什么我能够看到它而你却看不到它。

我通过从http://www.cnj.jus.br/bnmp/#/pesquisar开始找到它,然后选择一个estado,单击Pesquisar,然后检查网络日志。

您似乎需要向 http://www.cnj.jus.br/bnmp/rest/pesquisar 发出发布请求。您还需要编辑有效负载以包含所需的状态和页面。

所以它应该看起来像这样:

payload = {
    "criterio":{
        "orgaoJulgador":{
            "uf":"AC",
            "municipio":"",
            "descricao":""
        },
        "orgaoJTR":{},
        "parte":{
            "documentos":[
                {"identificacao":""}
             ]
         }
     },
     "paginador":{"paginaAtual":2},
     "fonetica":"true",
     "ordenacao":{"porNome":False,"porData":False}
}

url = ('http://www.cnj.jus.br/bnmp/rest/pesquisar')

r = requests.post(url, json=payload)
print(r.status_code)

print(r.json())

关于python - 如何在 Python 中从生成表格的网站进行网页抓取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49804906/

相关文章:

pandas - 基于可变长度的 Pandas 数据帧列中的索引列表

java - Jackson 不同的 JSONFilter 相同的类

json - 无法在 ListView 中加载变量

javascript - 将对象从 View /JavaScript传递到MVC操作

python - YouTube API 返回带有空列表的 nextPageToken

python - 降维后使用选定的变量会引发值错误

python - Pandas groupby - 一组不同的值

Windows 的 Python Curses 不会覆盖字符串

python :function that takes an iterable argument and generates tuples

python - 估计相机焦距,用于基于对极的姿势恢复