Businesses

Como enviar um formulário web em Python

Hoje, 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:

import urllib
import urllib2
import webbrowser

url = "http://duckduckgo.com/html"
data = urllib.urlencode({'q': 'Python'})
results = urllib2.urlopen(url, data)
with open("results.html", "w") as f:
    f.write(results.read())

webbrowser.open("results.html")

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:

import requests

url = "http://duckduckgo.com/html"
payload = {'q':'python'}
r = requests.post(url, payload)
with open("requests_results.html", "w") as f:
    f.write(r.content)

Com 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!

import mechanize

url = "http://duckduckgo.com/html"
br = mechanize.Browser()
br.set_handle_robots(False) # ignore robots
br.open(url)
br.select_form(name="x")
br["q"] = "python"
res = br.submit()
content = res.read()
with open("mechanize_results.html", "w") as f:
    f.write(content)

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.

Dr. Michael J. Garbade

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.

Recent Posts

Blockchain in Elections: A Leap Toward Transparent Democracy

In 2024 we're witnessing a critical point in democratic technology: the integration of blockchain and…

3 weeks ago

Win Big with Our Amazon Fire Max 11 & AirPods Pro Giveaway!

We’re thrilled to announce an exciting opportunity for you to win not one but two…

2 months ago

Unleashing Potential: How Education Ecosystem Transforms Learning into Real-World Success

Acquiring practical skills is crucial for career advancement and personal growth. Education Ecosystem stands out…

4 months ago

The Role of Artificial Intelligence in Modern Software Development

Artificial Intelligence (AI) has been making significant strides in various industries, and the software development…

7 months ago

Highest Stable Coin Yields – (W16 – 2024)

Another week to bring you the top yield platforms for three of the most prominent…

8 months ago

LEDU Token OTC Trading

If you hold a large volume of LEDU tokens above 1 million units and wish…

9 months ago