我正在尝试查看一个html文件并删除其中的所有标记,以便只留下文本,但我的正则表达式出现了问题。这就是我到目前为止所拥有的。
import urllib.request, re
def test(url):
html = str(urllib.request.urlopen(url).read())
print(re.findall('<[\w\/\.\w]*>',html))html是一个只有几个链接和文本的简单页面,但是我的正则表达式不能接受!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN“和'a href="....”标签。谁能解释一下我的正则表达式需要修改什么?
发布于 2010-01-30 08:01:35
使用BeautifulSoup。使用lxml。不要使用regular expressions来解析HTML。
编辑2010-01-29:这将是lxml的合理起点:
from lxml.html import fromstring
from lxml.html.clean import Cleaner
import requests
url = "https://stackoverflow.com/questions/2165943/removing-html-tags-from-a-text-using-regular-expression-in-python"
html = requests.get(url).text
doc = fromstring(html)
tags = ['h1','h2','h3','h4','h5','h6',
'div', 'span',
'img', 'area', 'map']
args = {'meta':False, 'safe_attrs_only':False, 'page_structure':False,
'scripts':True, 'style':True, 'links':True, 'remove_tags':tags}
cleaner = Cleaner(**args)
path = '/html/body'
body = doc.xpath(path)[0]
print cleaner.clean_html(body).text_content().encode('ascii', 'ignore')您需要的是内容,所以您可能不需要任何javascript或CSS。此外,您可能只想要主体中的内容,而不是头部的HTML。在lxml.html.clean上阅读,看看你可以轻松地去掉什么。比正则表达式聪明多了,不是吗?
另外,要注意unicode编码问题。您很容易得到无法打印的HTML。
2012-11-08:从使用urllib2改为使用requests。只要使用请求即可!
发布于 2010-01-30 08:29:14
import re
patjunk = re.compile("<.*?>| |&",re.DOTALL|re.M)
url="http://www.yahoo.com"
def test(url,pat):
html = urllib2.urlopen(url).read()
return pat.sub("",html)
print test(url,patjunk)https://stackoverflow.com/questions/2165943
复制相似问题