如何使用请求捕获发布请求的结果页面?

时间:2013-11-01 19:33:19

标签: python python-requests

我正在使用带有请求的Python,并且我正在尝试将数据发送到缩短链接的网站的表单。一旦我使用requests.post。

,我想将链接存储到变量中的缩短链接

我已经阅读了有关状态代码的信息,但我不太清楚如何使用它们。这是输入形式的样子。

<form method="post" action="paste.php">
    <div class="row">
        <div class="12u">
            <input type="text" name="name" id="name" placeholder="Name of paste" />
        </div>
    </div>
    <div class="row">
        <div class="12u">
            <textarea name="paste" id="paste" placeholder="Paste contents"></textarea>
        </div>
    </div>
    <div class="row">
        <div class="12u">
            <a type="submit" class="button form-button-submit">Upload</a>
            <a href="#" class="button button-alt form-button-reset">Undo</a>
        </div>
    </div>
</form>

这是我到目前为止所拥有的。

def create_paste(url):
    title = 'title' # Define your title.
    paste = 'paste' # Define your paste content.

    try:
        durk = requests.post(url, data={'name': title, 'paste': paste})

        if durk.status_code == 302:
            print('Pasted!')
        else:
            print('Not pasted!')
    except:
        raise

我该怎么做呢?感谢。

编辑:重新阅读请求文档解决了问题。如果我允许重定向并使用r.url,我可以显示粘贴链接。

def derp():
    title = 'adsfjkl' # Define your title.
    paste = 'asdfasdhfasdflkjashdfkjasht' # Define your paste content.

    r = requests.post('http://website.com/paste.php', data={'name': title, 'paste': paste}, allow_redirects=True)

    if r.status_code == 200:
        print('Pasted! %s' % (r.url))
    else:
        print('Not pasted!')

    print r.url

1 个答案:

答案 0 :(得分:3)

最简单的方法是确实使用Requests.post,然后将此帖子结果传递给beautifulsoup并解析结果。

例如:

import request
from bs4 import BeautifulSoup as BS

response = request.get('http://stackoverflow.com/') 
bs = BS(response.text)

//do some parsing using beautifulsoup to get the link