2014-12-11 47 views
1

我有一个网站的形式,我想,以填补了一些数据和检索结果检索结果。填写表格和使用要求

我能想出的形式ID /类的HTML,但我不知道如何设置的内容,并发送回服务器并检索结果

我使用Request获取url和BeautifulSoup,来解析html。

这里是我到目前为止有:

import requests 
from bs4 import BeautifulSoup as bs 

def get_form(raw_resp): 
    soup = bs(raw_resp.text) 
    soup = soup.body.find_all('textarea', attrs={'id':'objetos'}) 
    form = soup[0] 
    return getattr(form,'attrs') 

payload = { 
    'object ID': 'SOMEIDHERE', 
    } 

url = 'http://www2.correios.com.br/sistemas/rastreamento/' 

with requests.session() as s: 
    resp = s.get(url) 
    form = get_form(resp) 
    for key,value in form.items(): 
     print "%s = %s"%(key,value) 

输出:

style = text-transform:uppercase; 
name = objetos 
onblur = this.value=this.value.toUpperCase() 
onkeydown = if (event.keyCode == 13) { this.form.submit(); return false; } 
id = objetos 
class = [u'f8col', u'fldSRO', u'f3row'] 

我想将OBJECT_ID通过这种形式和检索结果。

回答

1

在考察中浏览器的开发者工具的“网络”选项卡上,你可以看到,你需要做一个POST请求相同的URL提供objetosbtnPesq后参数:

with requests.session() as s: 
    s.get(url) 

    response = s.post('http://www2.correios.com.br/sistemas/rastreamento/resultado.cfm', 
         data={'objetos': payload['object ID'], 
          'btnPesq': 'Buscar'}) 
    print response.content 

作为一个侧面说明,有相关的工具,可以帮助你留上了一个台阶,并提交表格,请参阅:

二者均基于requestsBeautifulSoup

+0

Upvoted使用'requests.session()'。让OP开始正确的轨道。 – 2014-12-11 04:44:37

+0

你能解释一下你如何得到'btnPesq:Buscar'吗? – 2014-12-11 04:52:17

+0

@ f.rodrigues这是你可以留下硬编码的'objectos'是你应该专注于什么 - 它应该包含你的'对象ID'。 – alecxe 2014-12-11 04:53:44