2011-03-03 62 views
0

我要解析這個HTML:嘗試使用BeautifulSoup解析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結束所有鏈接。

我正在使用BeautifulSoup,它真的讓我發瘋,很多事情沒有奏效,就像你搜索一個特定的文本,它總是返回空列表。

曾嘗試:

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

comment = soup.find(text = re.compile(「。3gp」)) – jack

回答

2

當您搜索text你正在尋找所有匹配您的正則表達式的NavigableString對象(這是尋找任何字符後跟一個3,一個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基本find方法:的findAll(姓名,ATTRS,遞歸,文字,限制,** kwargs)

+0

想通了的最佳方式: – jack

+0

'video_tags = page.findAll(' A ') video_list = [] 爲video_tag在video_tags: URL = video_tag.get(' href '屬性) video_list.append(URL)' – jack

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"'] 
+0

不打印任何東西,我從url獲取的數據不是來自定義的字符串。 – jack

0

Pyparsing的makeHTMLTags表達給你的結果與正則表達式,但自動結果名稱(像命名組),以及許多HTML idiosyncracies的寬容:

>>> 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使用」結尾然後執行:

>>> _3gp_links = [a.href for a in aTag.searchString(h) if a.href.endswith(".3gp")]