我特别喜欢REGEX和HTML。我知道BeautifulSoup是一种处理HTML的方法,但是想尝试正则表达式
我需要在文本中搜索HTML标签(我使用findall)。我在Stackoverflow中尝试了多个场景和示例,但只获得了[](空字符串)。这是我试过的:
#reHTML = r'(?:<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1>)'
#reHTML = r'\<p>(.*?)\</p>'
#reHTML = r'<p>(.*?)\</p>'
#reHTML = r'<raw[^>]*?>(.*?)</raw>'
reHTML = r'<p>(.*?)</p>'
#reHTML = r'<.*?>'
和
rHTML = re.compile(reHTML, re.VERBOSE)
HTMLpara = rHTML.findall('http://pythonprogramming.net/parse-website-using- regular-expressions-urllib/', re.IGNORECASE)
显然,我错过了一些东西。请帮忙
答案 0 :(得分:0)
这将在网页中读取并找到<html>
或</html>
的所有实例。这是您正在寻找的解决方案吗?
import re
import urllib2
url = "http://stackoverflow.com"
f = urllib2.urlopen(url)
file = f.read()
p = re.compile("<html>|</html>")
instances = p.findall(file)
print instances
输出:
['<html>', '</html>']
我认为您的问题是您尝试在网址字符串中搜索HTML标记,而不是实际加载网页并进行搜索。
答案 1 :(得分:0)
你误解了regex.findall(string[, pos[, endpos]])
HTMLpara = rHTML.findall('http://pythonprogramming.net/parse-website-using- regular-expressions-urllib/', re.IGNORECASE)
表示您将rHTML
模式与字符串("http://pythonprogramming.net/parse-website-using- regular-expressions-urllib/"
)匹配,因此您将获得[]
您最好请求URL获取数据,然后调用findall分析结果字符串,如below。
import urllib.request
import re
url = 'http://pythonprogramming.net/parse-website-using-regular-expressions-urllib/'
req = urllib.request.Request(url)
resp = urllib.request.urlopen(req)
respData = resp.read()
paragraphs = re.findall(r'<p>(.*?)</p>',str(respData))