1

Мне нужно записать определенные цифры (температура и другие) из веб-службы мониторинга (LaCrosse Alerts). Тем не менее, вы должны войти в систему, чтобы использовать эту услугу. У меня есть аккаунт, и я начинаю выполнять действия, описанные здесь. В нем описаны только шаги, необходимые для анализа простого веб-сайта с использованием Cygwin, а не веб-сайта, заблокированного по имени пользователя и паролю. Я пытался найти что-нибудь, что могло бы сделать это, но безуспешно. Как я могу войти на сайт, а затем проанализировать одну страницу, используя настройки, описанные выше? Является ли Cygwin лучшим способом сделать это? Существует ли более простой способ анализа веб-сайта и входа в систему, например, с помощью пакетного сценария? Похоже, что я могу использовать Wget для загрузки страницы, но я не уверен, как ее проанализировать. Это будет выглядеть так:

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

Как бы я запустил эту задачу по расписанию, а также проанализировал некоторые теги <div> на странице?

1 ответ1

1

Это действительно зависит от того, насколько легко / сложна информация, представленная на веб-странице. Если это что-то, что может быть вычеркнуто, то вы можете использовать ответ SO здесь (из комментария выше). Однако, если это не то, что может быть легко вычеркнуто, тогда вы могли бы написать сценарий Python, который может легко сделать это для вас. Вам нужно будет использовать urllib2 и cookiejar, а затем использовать что-то вроде lxml и BeautifulSoup для анализа HTML. Ответ SO здесь - отличное руководство о том, как вы можете войти в систему. Для простоты я собираюсь скопировать вставить код здесь:

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>")

Затем вы можете запускать это каждые X минут или использовать сам Python для определения времени выполнения вышеуказанной функции каждые X минут и отправлять / отправлять результаты по электронной почте. В зависимости от того, что вы пытаетесь сделать, это может быть излишним, но когда мне нужно было сделать что-то подобное в прошлом, я выбрал этот путь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .