使用正则表达式解析HTML

时间:2014-04-23 21:27:09

标签: python html regex parsing

我是Python新手。编码器通过给我一些代码来解析HTML来帮助我。我无法理解它是如何工作的。我的想法是从中获取(使用?)HTML funtweets.com/random并且基本上在早上告诉我一个有趣的笑话作为闹钟。它目前提取页面上的所有笑话,我只想要一个。修改代码或详细解释代码如何工作对我有帮助。这是代码:

import re 
import urllib2

page = urllib2.urlopen("http://www.m.funtweets.com/random").read() 
user = re.compile(r'<span>@</span>(\w+)') 
text = re.compile(r"</b></a> (\w.*)") 
user_lst =[match.group(1) for match in re.finditer(user, page)] 
text_lst =[match.group(1) for match in re.finditer(text, page)] 
for _user, _text in zip(user_lst, text_lst):
    print '@{0}\n{1}\n'.format(_user,_text)

3 个答案:

答案 0 :(得分:0)

user3530608你想要一场比赛,而不是通过比赛进行迭代?

这是开始使用python正则表达式的好方法。

这是对您的代码的一个小调整。我没有在我面前测试python,所以如果你遇到任何问题,请告诉我。

import re 
import urllib2

page = urllib2.urlopen("http://www.m.funtweets.com/random").read() 
umatch = re.search(r"<span>@</span>(\w+)", page)
user = umatch.group()
utext = re.search(r"</b></a> (\w.*)", page)
text = utext.group()
print '@{0}\n{1}\n'.format(user,text)

答案 1 :(得分:0)

虽然您可以通过正则表达式解析html,但我强烈建议您使用一些python第三个lib。

我最喜欢的htmlparser lib是PyQuery,你可以将它用作jquery: 比如

from pyquery import PyQuery as pq
page=pq(url='http://www.m.funtweets.com/random')
users=page("#user_id")
a_first=page("a:first")
...

您可以在此处找到它:https://pypi.python.org/pypi/pyquery

只需:

pip install PyQuery
or 
easy_install PyQuery

你会喜欢它!

另一个htmlparse-lib:https://pypi.python.org/pypi/beautifulsoup4/4.3.2

答案 2 :(得分:0)

如果有人有兴趣从没有html标签的html中获取一个笑话,这里是最终代码:

import re 
import urllib2
def remove_html_tags(text):
    pattern = re.compile(r'</b></a>') 
    return pattern.sub('', text) 

page = urllib2.urlopen("http://www.m.funtweets.com/random").read() 
umatch = re.search(r"<span>@</span>(\w+)", page) 
user = umatch.group() 
utext = re.search(r"</b></a> (\w.*)", page) 
text = utext.group()
print remove_html_tags(text)