Python 和网页标签正则表达式
我需要网页上的内容。我想从中获取一些数据。它的格式看起来像这样:
< div class="deg">DATA< /div>
根据我的理解,我需要使用正则表达式,但我不知道该用哪个。
我尝试了下面的代码,但没有得到任何结果。请帮我纠正一下:
regexHandler = re.compile('(<div class="deg">(?P<div class="deg">.*?)</div>)')
result = regexHandler.search( pageData )
4 个回答
0
虽然用正则表达式(regex)来快速处理HTML是可以的,但其实有一种更好、更干净的方法,那就是使用像 lxml.html 这样的HTML解析器。你可以用 XPath 或 CSS选择器 来查询解析后的树形结构。
html = """<html><body><div class="deg">DATA1</div><div class="deg">DATA2</div></body></html>"""
import lxml.html
page = lxml.html.fromstring(html)
#page = lxml.html.parse(url)
for element in page.findall('.//div[@class="deg"]'):
print element.text
#using css selectors
from lxml.cssselect import CSSSelector
sel = CSSSelector("div.deg")
for element in sel(page):
print element.text
6
我建议使用一个好的HTML解析器,比如BeautifulSoup。不过如果你处理的是格式正确的HTML,Python自带的库里的解析器,比如HTMLParser,也能很好地完成这个任务。
如果你还是想用原始的正则表达式方法,可以试试这个模式:
r'<div class="deg">([^<]*)</div>'
这个方法看起来是从字符串'<div class="deg">DATA</div>
'中提取出'DATA'的最简单方式——前提是你就是想要这个结果。你可能需要在某些地方加上一个或多个\s*
,这样可以处理可选的空格。
3
如果你想要在匹配的项目中包含div标签:
regexpHandler = re.compile('(<div class="deg">.*?</div>)')
如果你只想要数据部分,不想要div标签:
regexpHandler = re.compile('<div class="deg">(.*?)</div>')
然后运行匹配并获取结果:
result = regexHandler.search( pageData )
matchedText = result.groups()[0]