如何使用Python中的正则表达式在页面中搜索文本?

时间:2012-01-03 14:54:46

标签: python regex

我正在尝试为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

2 个答案:

答案 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)。