Web scrapping Consulta Anvisa

Oi pessoal,

Estou tentando fazer um scrapping do site da Consulta Anvisa e não consigo o resultado esperado.

A ideia é entrar nesse site
Buscar um cnpj (p.ex: 46070868003699)
E pegar a lista retornada em json

O que fiz foi:

library(httr)

url <- "https://consultas.anvisa.gov.br/#/saude/"

lista <- list(
  "count" = 10,
  "filter[cnpj]" = 46070868003699,
  "page" = 1
)

resposta <- httr::POST(
  url = url,
  body = lista,
  encode = "json"
)

resposta
#> Response [https://consultas.anvisa.gov.br/#/saude/]
#>   Date: 2022-07-31 21:21
#>   Status: 200
#>   Content-Type: text/html
#>   Size: 15.6 kB
#> <!doctype html>
#> <html class="no-js">
#> <head>
#>     <meta charset="utf-8">
#>     <meta http-equiv="X-UA-Compatible" content="IE=9">
#>     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
#>     <title>Consultas - Agência Nacional de Vigilância Sanitária</title>
#>     <meta name="description" content="">
#>     <meta name="viewport" content="width=device-width">
#> 
#> ...

Created on 2022-07-31 by the reprex package (v2.0.1)

Podem me ajudar?

Bruno,

Analisando as chamadas do site, notei que alguns detalhes da sua requisição não batem com o original. Em primeiro lugar, a requisição que você quer é feita para outro URL. Além disso, ela é um GET, não um POST. Veja abaixo os request headers:

GET /api/consulta/saude?count=10&filter%5Bcnpj%5D=46070868003699&page=1 HTTP/1.1
Host: consultas.anvisa.gov.br
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://consultas.anvisa.gov.br/
If-Modified-Since: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-cache
Pragma: no-cache
Authorization: Guest
DNT: 1
Connection: keep-alive
Cookie: _TRAEFIK_BACKEND=http://10.0.16.84:8080; FGTServer=77E1DC77AE2F953D7ED796A08A630A01A53CF6FE5FD0E106412591871F9A9BBCFBDEA0AD564FD89D3BDE827B200B
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin

Na primeira linha você pode perceber que a URL da API é https://consultas.anvisa.gov.br/api/consulta/saude e que a requisição foi feita via GET. Se Tentarmos alterar só isso no seu código, entretanto, a requisição ainda não funciona… A saída é tentar adicionar os headers. Depois de muita prática, eu já sei que o provável culpado é o Authorization e adicioná-lo de fato resolve o problema de uma vez por todas:

# Parâmetros
query <- list(
  "count" = 10,
  "filter[cnpj]" = 46070868003699,
  "page" = 1
)

# Fazer requisição
resp <- httr::GET(
  "https://consultas.anvisa.gov.br/api/consulta/saude",
  query = query,
  httr::add_headers("Authorization" = "Guest")
)

# Estrutura do conteúdo
str(httr::content(resp))
#> List of 9
#>  $ content         :List of 10
#>   ..$ :List of 6
#>   .. ..$ processo: chr "250000197069401"
#>   .. ..$ empresa :List of 2
#>   .. .. ..$ cnpj       : chr "46070868003699"
#>   .. .. ..$ razaoSocial: chr "LABORATÓRIOS PFIZER LTDA"
#>   .. ..$ produto : chr "PARAFUSO MALEOLAR"
#>   .. ..$ mensagem:List of 4
#>   .. .. ..$ situacao : NULL
#>   .. .. ..$ resolucao: NULL
#>   .. .. ..$ motivo   : NULL
#>   .. .. ..$ negativo : logi FALSE
#>   .. ..$ registro: chr "11002160001"
#>   .. ..$ situacao: chr "Publicado deferimento"
#>   ..$ :List of 6
#>   .. ..$ processo: chr "250000055939430"
#>   .. ..$ empresa :List of 2
#>   .. .. ..$ cnpj       : chr "46070868003699"
#>   .. .. ..$ razaoSocial: chr "LABORATÓRIOS PFIZER LTDA"
#>   .. ..$ produto : chr "PARAFUSO ASNIS"
#>   .. ..$ mensagem:List of 4
#>   .. .. ..$ situacao : NULL
#>   .. .. ..$ resolucao: NULL
#>   .. .. ..$ motivo   : NULL
#>   .. .. ..$ negativo : logi FALSE
#>   .. ..$ registro: chr "11002160002"
#>   .. ..$ situacao: chr "Publicado deferimento"
#>   ..$ :List of 6
#>   .. ..$ processo: chr "250000063609346"
#>   .. ..$ empresa :List of 2
#>   .. .. ..$ cnpj       : chr "46070868003699"
#>   .. .. ..$ razaoSocial: chr "LABORATÓRIOS PFIZER LTDA"
#>   .. ..$ produto : chr "DRENO DE SUCCAO PORTO-VAC"
#>   .. ..$ mensagem:List of 4
#>   .. .. ..$ situacao : NULL
#>   .. .. ..$ resolucao: NULL
#>   .. .. ..$ motivo   : NULL
#>   .. .. ..$ negativo : logi FALSE
#>   .. ..$ registro: chr "11002160003"
#>   .. ..$ situacao: chr "Publicado deferimento"
#>   ..$ :List of 6
#>   .. ..$ processo: chr "250000063599367"
#>   .. ..$ empresa :List of 2
#>   .. .. ..$ cnpj       : chr "46070868003699"
#>   .. .. ..$ razaoSocial: chr "LABORATÓRIOS PFIZER LTDA"
#>   .. ..$ produto : chr "CIMENTO OSSEO SIMPLEX"
#>   .. ..$ mensagem:List of 4
#>   .. .. ..$ situacao : NULL
#>   .. .. ..$ resolucao: NULL
#>   .. .. ..$ motivo   : NULL
#>   .. .. ..$ negativo : logi FALSE
#>   .. ..$ registro: chr "11002160004"
#>   .. ..$ situacao: chr "Publicado deferimento"
#>   ..$ :List of 6
#>   .. ..$ processo: chr "250000056429362"
#>   .. ..$ empresa :List of 2
#>   .. .. ..$ cnpj       : chr "46070868003699"
#>   .. .. ..$ razaoSocial: chr "LABORATÓRIOS PFIZER LTDA"
#>   .. ..$ produto : chr "HASTE FEMURAL THOMPSON COM CABECA"
#>   .. ..$ mensagem:List of 4
#>   .. .. ..$ situacao : NULL
#>   .. .. ..$ resolucao: NULL
#>   .. .. ..$ motivo   : NULL
#>   .. .. ..$ negativo : logi FALSE
#>   .. ..$ registro: chr "11002160005"
#>   .. ..$ situacao: chr "Publicado deferimento"
#>   ..$ :List of 6
#>   .. ..$ processo: chr "250000056479386"
#>   .. ..$ empresa :List of 2
#>   .. .. ..$ cnpj       : chr "46070868003699"
#>   .. .. ..$ razaoSocial: chr "LABORATÓRIOS PFIZER LTDA"
#>   .. ..$ produto : chr "GRAMPO IMPLANTAVEL"
#>   .. ..$ mensagem:List of 4
#>   .. .. ..$ situacao : NULL
#>   .. .. ..$ resolucao: NULL
#>   .. .. ..$ motivo   : NULL
#>   .. .. ..$ negativo : logi FALSE
#>   .. ..$ registro: chr "11002160006"
#>   .. ..$ situacao: chr "Publicado deferimento"
#>   ..$ :List of 6
#>   .. ..$ processo: chr "250000063579331"
#>   .. ..$ empresa :List of 2
#>   .. .. ..$ cnpj       : chr "46070868003699"
#>   .. .. ..$ razaoSocial: chr "LABORATÓRIOS PFIZER LTDA"
#>   .. ..$ produto : chr "PROTESE DE OMBRO"
#>   .. ..$ mensagem:List of 4
#>   .. .. ..$ situacao : NULL
#>   .. .. ..$ resolucao: NULL
#>   .. .. ..$ motivo   : NULL
#>   .. .. ..$ negativo : logi FALSE
#>   .. ..$ registro: chr "11002160007"
#>   .. ..$ situacao: chr "Publicado deferimento"
#>   ..$ :List of 6
#>   .. ..$ processo: chr "250000055979491"
#>   .. ..$ empresa :List of 2
#>   .. .. ..$ cnpj       : chr "46070868003699"
#>   .. .. ..$ razaoSocial: chr "LABORATÓRIOS PFIZER LTDA"
#>   .. ..$ produto : chr "COMPONENTE TIBIAL CIMENTADO"
#>   .. ..$ mensagem:List of 4
#>   .. .. ..$ situacao : NULL
#>   .. .. ..$ resolucao: NULL
#>   .. .. ..$ motivo   : NULL
#>   .. .. ..$ negativo : logi FALSE
#>   .. ..$ registro: chr "11002160008"
#>   .. ..$ situacao: chr "Publicado deferimento"
#>   ..$ :List of 6
#>   .. ..$ processo: chr "250000078619539"
#>   .. ..$ empresa :List of 2
#>   .. .. ..$ cnpj       : chr "46070868003699"
#>   .. .. ..$ razaoSocial: chr "LABORATÓRIOS PFIZER LTDA"
#>   .. ..$ produto : chr "COMPONENTE TIBIAL NAO CIMENTADO"
#>   .. ..$ mensagem:List of 4
#>   .. .. ..$ situacao : NULL
#>   .. .. ..$ resolucao: NULL
#>   .. .. ..$ motivo   : NULL
#>   .. .. ..$ negativo : logi FALSE
#>   .. ..$ registro: chr "11002160009"
#>   .. ..$ situacao: chr "Publicado deferimento"
#>   ..$ :List of 6
#>   .. ..$ processo: chr "250000078569507"
#>   .. ..$ empresa :List of 2
#>   .. .. ..$ cnpj       : chr "46070868003699"
#>   .. .. ..$ razaoSocial: chr "LABORATÓRIOS PFIZER LTDA"
#>   .. ..$ produto : chr "PARAFUSO MINI-CORTICAL"
#>   .. ..$ mensagem:List of 4
#>   .. .. ..$ situacao : NULL
#>   .. .. ..$ resolucao: NULL
#>   .. .. ..$ motivo   : NULL
#>   .. .. ..$ negativo : logi FALSE
#>   .. ..$ registro: chr "11002160010"
#>   .. ..$ situacao: chr "Publicado deferimento"
#>  $ totalElements   : int 66
#>  $ totalPages      : int 7
#>  $ last            : logi FALSE
#>  $ numberOfElements: int 10
#>  $ first           : logi TRUE
#>  $ sort            : NULL
#>  $ size            : int 10
#>  $ number          : int 0

Created on 2022-08-01 by the reprex package (v2.0.1)

1 curtida

Funcionou tudo certo agora! O único problema que tive foi com CNPJs que iniciam com zero, mas coloquei entre aspas e funcionou!
Muito obrigado!