[PYTHON] MultiDict: lorsque vous effectuez un formulaire POST avec Crawler, etc.

MultiDict

Il peut y avoir plusieurs choix, alors essayez d'utiliser MultiDict de werkzeug:

$ pip install werkzeug

Dans la liste dict:

>>> from werkzeug.datastructures import MultiDict
>>> MultiDict([('a',1), ('a', 2), ('a', 3)])
MultiDict([('a', 1), ('a', 2), ('a', 3)])

ajouter à:

>>> d.update({'a': '4'})
>>> d
MultiDict([('a', 1), ('a', 2), ('a', 3), ('a', '4')])

mise à jour

>>> d['a']=5
>>> d
MultiDict([('a', 5)])

Obtenez des données de formulaire avec Beautiful Soup

Obtenez le formulaire HTML avec BeautifulSoup select ():

    def form_data(self, form_node):
        ''' form_node :Choisissez parmi HTML()Nœud de formulaire
        '''

        data = MultiDict(list(
           (t['name'], t.get('value', '')) 
           for i in ['text', 'hidden', 'password', ]
           for t in form_node.select('input[type=%s]' % i)
        ) + list(
           (t['name'], t.text) 
           for t in form_node.select('textarea')
        ) + list(
           (t['name'], t.get('value', '')) 
           for t in form_node.select('input[checked]' % i)
        ) + list(
            (s.parent['name'], s.get('value', s.text))
            for s in form_node.select('option[selected]')
        ))  

        # TODO: "file", "image", 
        # TODO: HTML5 -- input(list) and datalist

        return data

Lors du POST avec des requêtes, seul le premier paramètre est passé

requests est censé prendre en charge MultiDict, mais cela ne fonctionne pas dans mon environnement. .. ..

Cela ne peut pas être aidé, alors je l'ai converti en dict pour le moment:

>>> dict(d.lists())
{'a': [1, 2, 3, '4']}
    def post(self, uri, data):

        if isinstance(data, MultiDict):
            data = dict(data.lists())

        self.res = self.req.post(
            uri, data=data,
            verify=False, allow_redirects=False)
        self.last_uri = uri

Recommended Posts

MultiDict: lorsque vous effectuez un formulaire POST avec Crawler, etc.
Une solution de contournement lors de l'installation de pyAudio avec pip.
Erreur lors de l'installation d'un module avec Python pip
Conseils personnels lorsque vous faites diverses choses avec Python 3
J'obtiens une UnicodeDecodeError lors de l'exécution avec mod_wsgi
Un mémo lors de la création d'un environnement python avec miniconda