ПУБЛИКУВАЙТЕ данни от много части/формуляри към сайта с квадратчета за отметка чрез python

Сравнително нов съм в python и компютрите като цяло. В момента се опитвам да публикувам данни в уебсайт, а именно http://www.camp.bicnirrh.res.in/featcalc/ и изберете четири квадратчета за отметка, след като качите файл, който съдържа данните за анализ.

Досега това съм пробвал.

def encode_multipart_formdata(fields, files, data):
    """
    fields is a sequence of (name, value) elements for regular form fields.
    files is a sequence of (name, filename, value) elements for data to be uploaded as files
    Return (content_type, body) ready for httplib.HTTP instance
    """
    BOUNDARY = '-----------------------------7de18336272e32'
    CRLF = '\r\n'
    L = []
    L.append('--' + BOUNDARY)
    L.append('Content-Disposition: form-data; name="seq"')
    L.append('')
    L.append('--' + BOUNDARY)
    L.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (files[0], files[1]))
    L.append('Content-Type: text/plain')
    L.append('')
    L.append(data)
    L.append('')
    for (key, value) in fields:
        L.append('--' + BOUNDARY)
        L.append('Content-Disposition: form-data; name="%s"' % key)
        L.append('')
        L.append(value)
    L.append('--' + BOUNDARY + '--')
    L.append('')
    body = CRLF.join(L)
    content_type = 'multipart/form-data; boundary=%s' % BOUNDARY
    return content_type, body

За този код data е файлът, който е бил отворен, прочетен и затворен, files е името на файла и пълното име на файла - напр. ('Practice', 'Practice.txt') Това върна това, което смятах за добър формат. Но когато се опитах да публикувам шифрованите данни с помощта на urllib2, urllib2 заявка и urlopen, получих нещо, което изглеждаше като изходния код на страницата с резултати, но нямаше нито една от данните, които ми трябваха (т.е. без стойности). Опитах и ​​това, за да видя дали ще работи.

files = {'file': ('Practice.txt', open('Practice.txt', 'rb'))}
r = requests.post(url, files=files)
r.text

Мисля, че проблемът е, че страницата изисква да поставите отметка в квадратче и нямам представа как да направя това в заявка за публикация. Мислех да опитам да използвам cgi скрипт следващия път, но буквално ми свършват идеите.

Всяка помощ ще бъде високо оценена! Благодаря ти!


person Shay    schedule 16.06.2014    source източник


Отговори (1)


Модулът requests ще бъде най-полезен тук, трябва да зададете data и files

files = {'file': ('Practice.txt', open('Practice.txt', 'rb'))}
data = {'amino':'amino', 'aliphatic': 'aliphatic'}
r = requests.post(url, files=files, data=data)
r.text
person Victory    schedule 16.06.2014
comment
Благодаря за обратната връзка, но все още имам проблем. Изглежда, че не изпраща данните във файла. Ето какво се показва на границата на wireshark: \r\n--41a084d01fce47beaa2327cc74c33513\r\n Капсулирана многочастна част: Съдържание-разположение: данни за форма; име=файл; filename=Bishop/Practice.txt\r\n\r\n Последна граница: \r\n--41a084d01fce47beaa2327cc74c33513--\r\n --Липсват данни за тип съдържание и линия. Имате ли представа защо е така? Благодаря. - person Shay; 17.06.2014
comment
Хей! Благодаря ви, че отговорихте на тази публикация. Някой друг публикува отговор на този въпрос, формулиран малко по-различно, и той проработи. Той използва urllib, който следва формат, подобен на този по-горе, но липсващата част от кода, който предостави, използваше „Sessions = post.sessions(). Това накара кода ми да работи! Благодаря отново за отговора. - person Shay; 18.06.2014
comment
@Shay - радвам се, че си разбрал, сесиите са друга важна концепция. - person Victory; 18.06.2014