[英]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.