编写Python RegEx以在HTML中选择列表项的子集

时间:2010-11-24 20:27:39

标签: python html regex beautifulsoup

我有一个文件夹的Web索引视图......

<ul><li><a href="/sustainabilitymedia/pics/s5/"> Parent Directory</a></li> 
<li><a href="n150850_.jpg"> n150850_.jpg</a></li> 
<li><a href="n150850_ss.jpg"> n150850_ss.jpg</a></li> 
<li><a href="n150850q.jpg"> n150850q.jpg</a></li> 
<li><a href="n150858_.jpg"> n150858_.jpg</a></li> 
<li><a href="n150858_ss.jpg"> n150858_ss.jpg</a></li> 
<li><a href="n150858q.jpg"> n150858q.jpg</a></li> 
<li><a href="n150906_.jpg"> n150906_.jpg</a></li> 
<li><a href="n150906_ss.jpg"> n150906_ss.jpg</a></li>
...

列表一直在继续。我的目标是只获取以_ss.jpg结尾的列表项,以便我可以渲染我的结果并在页面上很好地显示它们以进行演示。

我可以使用BeautifulSoup抓取页面,但从那里,我不知道如何过滤掉只匹配特定模式的列表项。该页面位于Basic Auth之后,我在之前关于BeautifulSoup的问题中已经解决了这个问题。我很高兴不使用它。

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

您可以使用正则表达式执行findAll(),例如soup_object.findAll('a', {'href': re.compile('.*_ss\.jpg')})

答案 1 :(得分:1)

布伦特是完全正确的;因为他这么快就给他+1。

我已经找到了一个例子,所以我认为我只是发帖(无需投票):

>>> from BeautifulSoup import BeautifulSoup as bs
>>> from pprint import pprint
>>> import re
>>> markup = '''
... <ul><li><a href="/sustainabilitymedia/pics/s5/"> Parent Directory</a></li>
... <li><a href="n150850_.jpg"> n150850_.jpg</a></li>
... <li><a href="n150850_ss.jpg"> n150850_ss.jpg</a></li>
... <li><a href="n150850q.jpg"> n150850q.jpg</a></li>
... <li><a href="n150858_.jpg"> n150858_.jpg</a></li>
... <li><a href="n150858_ss.jpg"> n150858_ss.jpg</a></li>
... <li><a href="n150858q.jpg"> n150858q.jpg</a></li>
... <li><a href="n150906_.jpg"> n150906_.jpg</a></li>
... <li><a href="n150906_ss.jpg"> n150906_ss.jpg</a></li>'''
>>> soup = bs(markup)
>>> pprint(soup.findAll(href=re.compile('_ss[.]jpg$')))
[<a href="n150850_ss.jpg"> n150850_ss.jpg</a>,
 <a href="n150858_ss.jpg"> n150858_ss.jpg</a>,
 <a href="n150906_ss.jpg"> n150906_ss.jpg</a>]
感谢那些庆祝它的人。感恩节快乐。

答案 2 :(得分:0)

我会使用像

这样的东西
data = data.split("\n")
data = filter(x : x.find("_ss.jpg") >= 0,data)
data = map(lambda x: re.match("(?<=<href=)\".*_ss\.jpg\"(?=>)",x),data)

这应该产生一个以_ss.jpg结尾的名字列表。