- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的工作基本上是:
-在此网站中输入“https://aplicacoes.mds.gov.br/sagirmps/estrutura_fisica/preenchimento_municipio_cras_new1.php”
-填写 2 个表格(例如,使用 AC - Acre
和 Bujari
)
-点击生成的表格最后一列中的“Dados Detalhados”(详细数据)。 (当点击“Dados Detalhados”时,会生成第二个表,每行1个月的数据)。
- 单击每行最后一列的“Visualizar Relatório”,访问第二个表生成的数据。 <---- 这就是我正在尝试抓取的数据。但它是一个动态网站,我无法仅访问 url2
获取数据(当您单击“Visualizar relatório”时,网站返回到初始 url,但包含我想要抓取的表格) 。这是代码:
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = 'http://aplicacoes.mds.gov.br/sagirmps/estrutura_fisica/preenchimento_municipio_cras_new1.php'
params ={
'uf_ibge': '12',
'nome_estado': 'AC - Acre'
'p_ibge': '1200138'
'nome_municipio': 'Bujari'
}
r = requests.post(url, params = params, verify = False)
soup = BeautifulSoup(r.text, "lxml")
tables = pd.read_html(r.text)
unidades = tables[1]
print(unidades)
url2 = 'http://aplicacoes.mds.gov.br/sagirmps/estrutura_fisica/rel_preenchidos_cras.php?&p_id_cras=12001301971'
params2 ={
'p_id_cras': '12001301971'
'mes_referencia': '2019-02-01'
}
r2 = requests.post(url2, json = params2, verify = False)
soup2 = BeautifulSoup(r2.text, 'lxml')
soup2
请注意,url2
是您点击“Dados Detalhados”时生成的 URL,它的第二个字典是“p_id_cras”。
params2
应该是用于抓取我正在谈论的数据的字典。我在第二个发布请求中尝试了命令 params
、data
和 json
,但它们都不起作用。
最佳答案
url2
应使用不带参数的 GET
。
然后你有一个带有表格的页面,其中的链接具有 href="javascript:"
还有 onclick='enviadados(12001301971,"2019-02-01")'
这样你就有了下一个请求的参数。
上次请求使用 POST
以及参数 12001301971,2019-02-01
和 url
https://aplicacoes.mds.gov.br/sagirmps/estrutura_fisica/visualiza_preenchimento_cras.php '`
我的代码。我希望它能正确工作。
import requests
from bs4 import BeautifulSoup
import pandas as pd
base = 'http://aplicacoes.mds.gov.br/sagirmps/estrutura_fisica/'
url = base + 'preenchimento_municipio_cras_new1.php'
#print('url:', url)
params ={
'uf_ibge': '12',
'nome_estado': 'AC - Acre',
'p_ibge': '1200138',
'nome_municipio': 'Bujari' ,
}
r = requests.post(url, params=params, verify=False)
soup1 = BeautifulSoup(r.text, "lxml")
tables = pd.read_html(r.text)
#unidades = tables[1]
#print(unidades)
all_td1 = soup1.find('table', class_="panel-body").find_all('td')
#print('len(all_td1):', len(all_td1))
for td1 in all_td1:
all_a1 = td1.find_all('a')[:1]
#print('len(all_a1):', len(all_a1))
for a1 in all_a1:
url = base + a1['href']
print('url:', url)
r = requests.get(url, verify=False)
soup2 = BeautifulSoup(r.text, "lxml")
#print(soup.text)
all_td2 = soup2.find('table', class_="panel-body").find_all('td')
#print('len(all_td2):', len(all_td2))
for td2 in all_td2:
all_a2 = td2.find_all('a')
#print('len(all_a2):', len(all_a2))
for a2 in all_a2:
print('onclick:', a2['onclick'])
params = {
'p_id_cras': a2['onclick'][11:22], #'12001301971',
'mes_referencia': a2['onclick'][24:-2], #'2019-02-01',
}
print(params)
url = 'https://aplicacoes.mds.gov.br/sagirmps/estrutura_fisica/visualiza_preenchimento_cras.php'
r = requests.post(url, params=params, verify=False)
soup = BeautifulSoup(r.text, "lxml")
all_table = soup.find_all('table')
print(all_table)
关于python - 如何在python 3中获取该站点中的json数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55540722/
我是一名优秀的程序员,十分优秀!