我需要从基于网络的监控服务记录某些数字(温度和其他数字)(君越警报)。但是,您必须登录才能使用此服务。我有一个帐户,并开始按照概述的步骤操作这里。它仅概述了使用 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
这实际上取决于网页中呈现的信息的简单/复杂程度。如果是可以通过 grep 提取出来的东西,那么你可以使用 SO 答案这里(来自上面的评论)。但是,如果它不是可以轻松 grep 出来的东西,那么您可以编写一个可以轻松为您完成此操作的 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 分钟计时一次上述函数的执行,然后发布/通过电子邮件发送结果。根据您要执行的操作,这可能有点过头了,但当我过去需要做类似的事情时,这就是我采取的路线。