我必须解析这个HTML:
<a href="rtsp://v8.cache2.c.youtube.com/CjgLENy73wIaLwnqnxbpjjoGIRMYESARFEIJbXYtZ29vZ2xlSARSB3Jlc3VsdHNgpq6joefRgbhNDA==/0/0/0/video.3gp"><img src="http://i.ytimg.com/vi/IQY6jukWn-o/default.jpg?w=80&h=60&sigh=izeIwhz4POtPOOr-jRGrtC4qiFA" alt="video" width="80" height="60" style="border:0;margin:0px;" /></a>
我正在查找以.3gp
结尾的所有链接。
我正在使用BeautifulSoup,它真的让我很生气,很多东西都没有用,就像你搜索特定的文字一样,它总是返回空列表。
尝试过:
comment = soup.find(text=re.compile(".3gp"))
答案 0 :(得分:2)
当您搜索text
时,您正在查找与您的正则表达式匹配的所有NavigableString
个对象(正在寻找任何字符后跟3
,{{1如果您希望将g
字面上与正则表达式匹配,请使用b
和\.3agb
。
使用.3agb
并搜索soup.findAll
个<a>
标记,其中href
标记符合您的要求:
soup.findAll('a', attrs={'href': re.compile(".3gp")})
#or
soup.findAll('a', href=re.compile(".3gp"))
SEE: http://www.crummy.com/software/BeautifulSoup/documentation.html#The基本查找方法:findAll(name,attrs,recursive,text,limit,** kwargs)
答案 1 :(得分:0)
对于这个特殊问题,正则表达式可能已经足够好了。 我知道RegEx match open tags except XHTML self-contained tags(第一个答案是awsumness),但这个问题似乎是一个快速的黑客需要做一些完全不同的事情
In [1]: import re
In [2]: a = """...THE TEXT YOU PASTED.."""
In [3]: re.findall('".*?3gp"', a)
Out[3]: ['"rtsp://v8.cache2.c.youtube.com/CjgLENy73wIaLwnqnxbpjjoGIRMYESARFEIJbXYtZ29vZ2xlSARSB3Jlc3VsdHNgpq6joefRgbhNDA==/0/0/0/video.3gp"']
答案 2 :(得分:0)
Pyparsing的makeHTMLTags表达式将为您提供类似于正则表达式的结果,但具有自动结果名称(如命名组),以及许多HTML特性的容忍度:
>>> from pyparsing import *
>>>
>>> h = """<a href="rtsp://v8.cache2.c.youtube.com/CjgLENy73wIaLwnqnxbpjjoGIRMYE
SARFEIJbXYtZ29vZ2xlSARSB3Jlc3VsdHNgpq6joefRgbhNDA==/0/0/0/video.3gp"><img src="h
ttp://i.ytimg.com/vi/IQY6jukWn-o/default.jpg?w=80&h=60&sigh=izeIwhz4POtP
OOr-jRGrtC4qiFA" alt="video" width="80" height="60" style="border:0;margin:0px;"
/></a>"""
>>>
>>> aTag = makeHTMLTags("A")[0]
>>> result = aTag.parseString(h)
>>> print result.dump()
['A', ['href', 'rtsp://v8.cache2.c.youtube.com/CjgLENy73wIaLwnqnxbpjjoGIRMYESARFEIJbXYtZ29vZ2xlSARSB3Jlc3VsdHNgpq6joefRgbhNDA==/0/0/0/video.3gp'], False]
- empty: False
- href: rtsp://v8.cache2.c.youtube.com/CjgLENy73wIaLwnqnxbpjjoGIRMYESARFEIJbXYtZ29vZ2xlSARSB3Jlc3VsdHNgpq6joefRgbhNDA==/0/0/0/video.3gp
- startA: ['A', ['href', 'rtsp://v8.cache2.c.youtube.com/CjgLENy73wIaLwnqnxbpjjoGIRMYESARFEIJbXYtZ29vZ2xlSARSB3Jlc3VsdHNgpq6joefRgbhNDA==/0/0/0/video.3gp'], False]
- empty: False
- href: rtsp://v8.cache2.c.youtube.com/CjgLENy73wIaLwnqnxbpjjoGIRMYESARFEIJbXYtZ29vZ2xlSARSB3Jlc3VsdHNgpq6joefRgbhNDA==/0/0/0/video.3gp
>>> print result.href
rtsp://v8.cache2.c.youtube.com/CjgLENy73wIaLwnqnxbpjjoGIRMYESARFEIJbXYtZ29vZ2xlSARSB3Jlc3VsdHNgpq6joefRgbhNDA==/0/0/0/video.3gp
如果您有许多锚标记,并且只想要以“.3gp”结尾的那些,那么请执行:
>>> _3gp_links = [a.href for a in aTag.searchString(h) if a.href.endswith(".3gp")]