我正在尝试为phenny创建一个简单的模块,这是一个简单的Python IRC bot框架。该模块应该转到http://www.isup.me/websitetheuserrequested以检查网站是上升还是下降。我假设我可以使用正则表达式看模块,因为其他内置模块也使用它,所以我尝试创建这个简单的脚本,虽然我不认为我做得对。
import re, urllib
import web
isupuri = 'http://www.isup.me/%s'
check = re.compile(r'(?ims)<span class="body">.*?</span>')
def isup(phenny, input):
global isupuri
global cleanup
bytes = web.get(isupuri)
quote = check.findall(bytes)
result = re.sub(r'<[^>]*?>', '', str(quote[0]))
phenny.say(result)
isup.commands = ['isup']
isup.priority = 'low'
isup.example = '.isup google.com'
它导入所需的Web包(我认为),并定义要在页面中查找的字符串和文本。我真的不知道我在这四行中做了什么,我只是把代码从另一个模块中删除了。
以下是一个引用模块的示例,该模块从某个网页抓取随机引用,我尝试将其用作基础:http://pastebin.com/vs5ypHZy
有谁知道我做错了什么?如果需要澄清某些事情我可以告诉你,我认为我没有解释这一点。
这是我得到的错误:
Traceback (most recent call last):
File "C:\phenny\bot.py", line 189, in call
try: func(phenny, input)
File "C:\phenny\modules\isup.py", line 18, in isup
result = re.sub(r'<[^>]*?>', '', str(quote[0]))
IndexError: list index out of range
答案 0 :(得分:1)
试试这个(来自http://docs.python.org/release/2.6.7/library/httplib.html#examples):
import httplib
conn = httplib.HTTPConnection("www.python.org")
conn.request("HEAD","/index.html")
res = conn.getresponse()
if res.status >= 200 and res.status < 300:
print "up"
else:
print "down"
在检查响应状态之前,您还需要添加代码以遵循重定向。
修改强>
不需要处理重定向但使用逻辑异常的替代方法:
import urllib2
request = urllib2.Request('http://google.com')
request.get_method = lambda : 'HEAD'
try:
response = urllib2.urlopen(request)
print "up"
print response.code
except urllib2.URLError, e:
# failure
print "down"
print e
你应该自己做测试并选择最好的测试。
答案 1 :(得分:0)
错误表示在页面的任何位置都找不到正则表达式(列表quote
没有元素0
)。