Businesses

Como enviar um formulário web em Python

Como enviar um formulário web em PythonHoje, vamos ver três maneiras diferentes de enviar um formulário web em Python. Para isso, faremos uma pesquisa na web com duckduckgo.com pesquisando o termo “python” e salvando o resultado como um arquivo HTML. Usaremos os módulos urllib incluídos do Python e dois pacotes de terceiros: requests e mechanize

Python é uma linguagem de alto nível, dinâmica e interpretada que tem foco na simplicidade sem abrir mão da robustez. Além disso, aprender Python abre um leque de opções para a sua carreira e também facilita seu caminho para aprender outras linguagem de programação.

Como enviar um formulário web em Python

  • Enviando um formulário web com urllib
  • Enviando um formulário web com requests
  • Enviando um formulário web com mechanize

Enviando um formulário web com urllib

Vamos começar com urllib e urllib2, uma vez que eles estão incluídos na biblioteca padrão do Python. Também importaremos o webbrowser para abrir os resultados da pesquisa para visualização.

Aqui está o código:

A primeira coisa que você tem que fazer quando você quer enviar um formulário web é descobrir o nome do formulário e para qual URL você enviará. Se você for ao duckduckgo e visualizar a fonte, você notará que sua ação está apontando para um link relativo, “/html“. Assim, nosso URL é “http://duckduckgo.com/html“.

O campo de entrada é chamado de “q“. Então, para passar ao duckduckgo um termo de pesquisa, temos de passar para o campo “q“. É aqui que vem a linha urllib.urlencode. Esta linha codifica nosso termo de pesquisa corretamente. Em seguida, abrimos o URL e fazemos a pesquisa. Os resultados serão lidos e gravados no disco.

Finalmente, abrimos nossos resultados salvos usando o módulo webbrowser.

Agora, vamos descobrir como esse processo é diferente quando se usa o pacote requests.

Enviando um formulário web com requests

O pacote requests faz estes envios de uma forma um pouco mais elegante.

Vamos dar uma olhada:

Como enviar um formulário web em PythonCom requests, você só precisa criar um dicionário com o nome do campo como a chave e o termo de pesquisa como o valor.

Em seguida, use requests.post para fazer a pesquisa.

Finalmente, você usa o objeto de solicitação resultante, “r“, e acessa sua propriedade content, que deverá ser salva no disco.

Ignoramos a parte do webbrowser neste exemplo (e no próximo) por brevidade.

Agora, vamos ver como mechanize faz o seu trabalho.

Enviando um formulário web com mechanize

O módulo mechanize tem muitas atributos interessantes para navegar na internet com Python. Infelizmente, ele não suporta JavaScript. Enfim, vamos continuar com o show!

Como você pode ver, mechanize é um pouco mais detalhado do que os outros dois métodos anteriores. Também precisamos dizer-lhe para ignorar a diretiva robots.txt ou ele falhará. Claro, se você quer ser um bom internauta, então você não deve ignorá-lo.

De qualquer forma, para começar, você precisa de um objeto Browser. Então você abre o URL, seleciona o formulário (neste caso, “x“) e configura um dicionário com os parâmetros da busca como antes.

Note que em cada método, a configuração de dict é um pouco diferente.

Em seguida, você envia a consulta e lê o resultado. Agora, basta salvar o resultado no disco e está pronto!

Conclusão

Dos três, requests é, provavelmente, o mais simples. Mechanize, dos três, é os mais detalhado. Este pacote tem muitas utilidades e, na maioria das vezes, é usado para foi feito para raspagem de dados e testes de sites.

Avatar
About author

I, Dr. Michael J. Garbade is the co-founder of the Education Ecosystem (aka LiveEdu), ex-Amazon, GE, Rebate Networks, Y-combinator. Python, Django, and DevOps Engineer. Serial Entrepreneur. Experienced in raising venture funding. I speak English and German as mother tongues. I have a Masters in Business Administration and Physics, and a Ph.D. in Venture Capital Financing. Currently, I am the Project Lead on the community project -Nationalcoronalvirus Hotline I write subject matter expert technical and business articles in leading blogs like Opensource.com, Dzone.com, Cybrary, Businessinsider, Entrepreneur.com, TechinAsia, Coindesk, and Cointelegraph. I am a frequent speaker and panelist at tech and blockchain conferences around the globe. I serve as a start-up mentor at Axel Springer Accelerator, NY Edtech Accelerator, Seedstars, and Learnlaunch Accelerator. I love hackathons and often serve as a technical judge on hackathon panels.