尝试使用beauthoulsoup解析HTML,但它不起作用?

2024-09-29 22:43:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须解析这个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&amp;h=60&amp;sigh=izeIwhz4POtPOOr-jRGrtC4qiFA" alt="video" width="80" height="60" style="border:0;margin:0px;" /></a>

我正在寻找所有以.3gp结尾的链接。在

我用的是beauthulsoup,它真的让我抓狂,很多东西都不起作用,比如如果你搜索一个特定的文本,它总是返回空列表。在

尝试过:

comment = soup.find(text=re.compile(".3gp")) 

Tags: srccomhttpimgyoutubehtmlamphref
3条回答

当您搜索^{}时,您正在查找与正则表达式匹配的所有NavigableString对象(它查找后面跟有3gb的任何字符,如果您想将.3agb与regex匹配,请使用\.3agb)。在

使用soup.findAll并以这种方式搜索任何带有href匹配的<a>标记:

soup.findAll('a', attrs={'href': re.compile(".3gp")})
#or
soup.findAll('a', href=re.compile(".3gp"))

请参见:http://www.crummy.com/software/BeautifulSoup/documentation.html#The基本查找方法:findAll(name,attrs,recursive,text,limit,**kwargs)

对于这个特殊的问题,正则表达式可能已经足够好了。 我知道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"']

Pyparsing的makeHTMLTags表达式将为您提供类似于regex的结果,但具有自动结果名称(如命名组)以及对许多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&amp;h=60&amp;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”结尾,请执行以下操作:

^{pr2}$

相关问题 更多 >

    热门问题