填写表单并使用请求检索结果

时间:2014-12-11 04:33:16

标签: python forms python-requests

我有一个网站表单,我想填写一些数据并检索结果。

我能够在html中找出表单id / class,但我不知道如何设置内容并将其发送回服务器并检索结果

我使用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 个答案:

答案 0 :(得分:1)

在检查浏览器开发者工具中的“网络”标签时,您可以看到您需要向提供POSTobjetos帖子参数的同一网址发出btnPesq个请求:< / p>

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