Python和web标记regex

Python和web标记regex,python,regex,Python,Regex,我需要网页内容。我需要从中获取一些数据。它看起来像: 数据 据我所知,我必须使用正则表达式,但我不能选择一个 我尝试了下面的代码,但没有任何结果。请纠正我: regexHandler = re.compile('(<div class="deg">(?P<div class="deg">.*?)</div>)') result = regexHandler.search( pageData ) regexpendler=re.compile(“(?P.*?”

我需要网页内容。我需要从中获取一些数据。它看起来像:

数据

据我所知,我必须使用正则表达式,但我不能选择一个

我尝试了下面的代码,但没有任何结果。请纠正我:

regexHandler = re.compile('(<div class="deg">(?P<div class="deg">.*?)</div>)')
result = regexHandler.search( pageData )
regexpendler=re.compile(“(?P.*?”)
结果=regexpundler.search(页面数据)

如果要在匹配项中包含div标记:

regexpHandler = re.compile('(<div class="deg">.*?</div>)')

如果要在匹配项中包含div标记:

regexpHandler = re.compile('(<div class="deg">.*?</div>)')

我建议使用一个好的HTML解析器(比如——但出于您的目的,也就是说,使用格式良好的HTML作为输入,Python标准库附带的解析器(比如)也应该可以很好地工作)而不是使用原始资源来解析HTML

如果您想继续使用原始RE方法,则模式:

r'<div class="deg">([^<]*)</div>'

r'([^我建议使用一个好的HTML解析器(例如——但出于您的目的,即使用格式良好的HTML作为输入,Python标准库附带的解析器,例如,也应该可以很好地工作)而不是原始资源来解析HTML

如果您想继续使用原始RE方法,则模式:

r'<div class="deg">([^<]*)</div>'

r'([^您可以在Python中使用简单的字符串函数,不需要正则表达式

mystr = """< div class="deg">DATA< /div>"""
if "div" in mystr and "class" in mystr and "deg" in mystr:
    s = mystr.split(">")
    for n,item in enumerate(s):
        if "deg" in item:
            print s[n+1][:s[n+1].index("<")]
mystr=“”
数据 如果mystr中的“div”和mystr中的“class”以及mystr中的“deg”: s=mystr.split(“>”) 对于n,枚举中的项: 如果项目中的“度”:
打印s[n+1][:s[n+1]。索引(“”。然后检查拆分的项目,检查“deg”,并在其后面获取项目,因为“deg”出现在您想要获取的数据之前。当然,这不是唯一的方法。

您可以在Python中使用简单的字符串函数,不需要正则表达式

mystr = """< div class="deg">DATA< /div>"""
if "div" in mystr and "class" in mystr and "deg" in mystr:
    s = mystr.split(">")
    for n,item in enumerate(s):
        if "deg" in item:
            print s[n+1][:s[n+1].index("<")]
mystr=“”
数据 如果mystr中的“div”和mystr中的“class”以及mystr中的“deg”: s=mystr.split(“>”) 对于n,枚举中的项: 如果项目中的“度”:
打印s[n+1][:s[n+1]。索引(“”。然后检查拆分的项目,检查“deg”,并从“deg”中获取其后面的项目出现在您想要获取的数据之前。当然,这不是唯一的方法。

虽然可以使用rexex进行快速、脏的html处理,但更好、更干净的方法是使用类似的html解析器,并使用或查询解析的树

html=“”数据1数据2”“”
导入lxml.html
page=lxml.html.fromstring(html)
#page=lxml.html.parse(url)
对于page.findall('.//div[@class=“deg”]”中的元素:
打印元素.text
#使用css选择器
从lxml.cssselect导入CSSSelector
sel=CSS选择器(“分度”)
对于sel中的元素(第页):
打印元素.text

虽然可以使用rexex进行快速、脏的html处理,但更好、更干净的方法是使用html解析器,如,并使用或查询解析的树

html=“”数据1数据2”“”
导入lxml.html
page=lxml.html.fromstring(html)
#page=lxml.html.parse(url)
对于page.findall('.//div[@class=“deg”]”中的元素:
打印元素.text
#使用css选择器
从lxml.cssselect导入CSSSelector
sel=CSS选择器(“分度”)
对于sel中的元素(第页):
打印元素.text

为什么更复杂的
([^
*?
会容忍(并吸收)嵌入的标记,并且如果div中包含另一个div(抓住内部dir的开始但不是结束),就会失去平衡,而我建议的模式只有在div包含纯文本数据时才匹配,即没有嵌入标记,这在没有明确规范的情况下似乎更合理。这种复杂的情况就是为什么我开始建议避免在HTML解析中使用裸REs,并为此目的重用许多优秀的现有模块中的任何一个,无论是在e标准库和第三方库。我认为,在没有真正的解析器的情况下,您选择更严格的路径,我选择更宽松的路径,这两种方法各有优缺点。我同意某种形式的实际DOM解析器更适合一般情况关于这个问题,但这取决于Ockonal,因为他是最了解他将获得的数据的人。不过,感谢大家的讨论。:@Dav,是的,有很多好的观点。我应该指出REs(除非扩展到比REs更大的程度,就像在最新版本的Perl中一样)是出了名的做不到的“用平衡圆括号解析”…这就是XML和HTML的全部内容,使得REs特别不适合此类任务(尽管人们一直在尝试!-)。谢谢。你的帖子对我来说信息量很大。我稍后会了解它。为什么更复杂的
([^
*?
会容忍(并吸收)它嵌入标记,如果div中包含另一个div,则会失去平衡(抓住内部dir的开始但不是结束),而我建议的模式只有在div包含纯文本数据时才匹配,即没有嵌入标记,这在没有明确规范的情况下似乎更合理。这种复杂的情况就是为什么我开始建议避免在HTML解析中使用裸REs,并为此目的重用许多优秀的现有模块中的任何一个,无论是在e标准库和第三方库。我认为,在没有真正的解析器的情况下,您选择更严格的路径,我选择更宽松的路径,这两种方法各有优缺点。我同意某种形式的实际DOM解析器更适合一般情况关于这个问题,但这取决于Ockonal,因为他是最了解他将获得的数据的人。不过,感谢大家的讨论。:@Dav,是的,很好的观点。我应该指出REs(除非扩展到比REs更多,就像在最新版本的Perl中一样)是出了名的做不到的。”使用平衡圆括号进行解析“…这就是XML和HTML的全部内容,使得REs特别不适合此类任务(尽管人们一直在尝试!-)。谢谢。您的po