簡體   English   中英

使用正則表達式解析HTML

[英]Using regular expressions to parse HTML

我是Python的新手。 編碼員通過給我一些代碼來解析HTML幫助了我。 我在理解其工作方式時遇到了麻煩。 我的想法是,它從funtweets.com/random中獲取(使用?)HTML,基本上在早上給我講了一個有趣的笑話,作為鬧鍾。 它目前提取頁面上的所有笑話,而我只想要一個。 修改代碼或對代碼的工作方式進行詳細說明對我有幫助。 這是代碼:

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)

您想要一個匹配項,而不是遍歷匹配項嗎?

這是開始使用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)

盡管您可以通過regex解析html,但是我強烈建議您使用一些python third的lib。

我最喜歡的htmlparser庫是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

如果有人有興趣從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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM