https://mechanicalsoup.readthedocs.io/
Uma biblioteca Python para automatizar a interação com sites. MechanicalSoup armazena e envia cookies automaticamente, segue redirecionamentos e pode seguir links e enviar formulários. Não faz JavaScript.
MechanicalSoup foi criado por M Hickford, que era um grande usuário da biblioteca Mechanize. Infelizmente, o Mechanize era incompatível com o Python 3 até 2019 e seu desenvolvimento ficou paralisado por vários anos. MechanicalSoup fornece uma API semelhante, construída nos gigantes Python Requests (para sessões HTTP) e BeautifulSoup (para navegação em documentos). Desde 2017 é um projeto mantido ativamente por uma pequena equipe que inclui @hemberger e @moy.
PyPy3 também é suportado (e testado).
Baixe e instale a versão mais recente lançada do PyPI:
pip instalar MechanicalSoup
Baixe e instale a versão de desenvolvimento do GitHub:
pip instalar git + https://github.com/MechanicalSoup/MechanicalSoup
Instalando a partir do código-fonte (instala a versão no diretório de trabalho atual):
instalação do python setup.py
(Em todos os casos, adicione --user
ao comando install
para instalar no diretório inicial do usuário atual.)
A documentação completa está disponível em https://mechanicalsoup.readthedocs.io/. Você pode querer ir diretamente para a documentação da API gerada automaticamente.
Em exemplos/expl_qwant.py, código para obter os resultados de uma pesquisa Qwant:
"""Exemplo de uso do MechanicalSoup para obter os resultados do mecanismo Qwantsearch."""import reimport Mechanicalsoupimport htmlimport urllib.parse# Connect to Qwantbrowser =mechanicalsoup.StatefulBrowser(user_agent='MechanicalSoup')browser.open("https:// lite.qwant.com/")# Preencha a pesquisa formbrowser.select_form('#search-form')browser["q"] = "MechanicalSoup"browser.submit_selected()# Exibe os resultados do link em browser.page.select('.result a'):# Qwant mostra links de redirecionamento , não o URL real, então extraia# o URL real do redirecionamento link:href = link.attrs['href']m = re.match(r"^/redirect/[^/]*/(.*)$", href)if m:href = urllib.parse.unquote(m.group(1))print(link.text, ' ->', href)
Mais exemplos estão disponíveis em exemplos/.
Para um exemplo com um formulário mais complexo (caixas de seleção, botões de opção e áreas de texto), leia testes/test_browser.py e testes/test_form.py.
Instruções para construir, testar e contribuir para o MechanicalSoup: consulte CONTRIBUTING.rst.
Leia as perguntas frequentes.