Enviar solicitação HTTP para o site com senha e nome de usuário e, em seguida, registrar os resultados

1

Eu preciso gravar determinados números (temperatura e outros) de um serviço de monitoramento baseado na Web ( Alertas LaCrosse ). No entanto, você deve fazer o login para usar este serviço. Eu tenho uma conta e estou começando a seguir as etapas descritas aqui . Ele apenas descreve as etapas necessárias para analisar um site simples usando o Cygwin, e não um site com nome de usuário e senha bloqueados. Eu tentei procurar por qualquer coisa que pudesse fazer isso, mas não tive sorte. Como posso acessar o site e analisar uma página usando a configuração encontrada acima? A maneira do Cygwin é a melhor maneira de fazer isso? Existe uma maneira mais fácil de analisar o site e o login, como usar um script em lote? Também parece que eu posso usar o Wget para baixar a página, mas não sei como analisá-la. Isso seria parecido com:

# Now grab the page or pages we care about.
wget --load-cookies cookies.txt \
-p http://server.com/interesting/article.php

Como eu poderia executar essa tarefa em uma tarefa agendada e também analisar algumas das tags <div> na página?

    
por hichris123 25.12.2013 / 23:31

1 resposta

1

Depende realmente de quão fácil / complexa é a informação representada na página web. Se for algo que pode ser encontrado, você pode usar a resposta SO aqui (do comentário acima). No entanto, se não for algo que pode ser facilmente encontrado, você pode escrever um script em Python que pode facilmente fazer isso por você. Você precisaria usar urllib2 e cookiejar e, em seguida, usar algo como lxml e BeautifulSoup para analisar o HTML. A resposta SO aqui é um excelente guia sobre como você poderia potencialmente login. Para facilitar, vou copiar e colar o código aqui:

import cookielib
import urllib
import urllib2
from BeautifulSoup import BeautifulSoup #you can also use lxml, if you wanted.

# Store the cookies and create an opener that will hold them
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

# Add our headers
opener.addheaders = [('User-agent', 'RedditTesting')]

# Install our opener (note that this changes the global opener to the one
# we just made, but you can also just call opener.open() if you want)
urllib2.install_opener(opener)

# The action/ target from the form
authentication_url = 'https://ssl.reddit.com/post/login'

# Input parameters we are going to send
payload = {
  'op': 'login-main',
  'user': '<username>',
  'passwd': '<password>'
  }

# Use urllib to encode the payload
data = urllib.urlencode(payload)

# Build our Request object (supplying 'data' makes it a POST)
req = urllib2.Request(authentication_url, data)

# Make the request and read the response
resp = urllib2.urlopen(req)
contents = resp.read()

# parse the page using BeautifulSoup. You'll have to look at the DOM
# structure to do this correctly, but there are resources all over the
# place that makes this really easy.
soup = BeatifulSoup(contents)
myTag = soup.find("<sometag>")

Você pode então executar este número de minutos X, ou usar o próprio Python para cronometrar a execução da função acima a cada X minutos e postar / enviar os resultados por e-mail. Dependendo do que você está tentando fazer, pode ser um exagero, mas quando eu precisei fazer algo semelhante no passado, esse é o caminho que eu tomei.

    
por 26.12.2013 / 03:08