soup = BeautifulSoup(your_data)
uploaded = []
link_data = []
for f in soup.findAll("font", {"class":"detDesc"}):
uploaded.append(f.contents[0])
link_data.append(f.a.contents[0])
Например, используя следующие данные:
your_data = """
<font class="detDesc">Uploaded 10-29 18:50, Size 4.36 GiB, ULed by <a class="detDesc" href="/user/NLUPPER002/" title="Browse NLUPPER002">NLUPPER002</a></font>
<div id="meow">test</div>
<font class="detDesc">Uploaded 10-26 19:23, Size 1.16 GiB, ULed by <a class="detDesc" href="/user/NLUPPER002/" title="Browse NLUPPER002">NLUPPER003</a></font>
"""
выполнение кода выше дает вам:
>>> print uploaded
[u'Uploaded 10-29 18:50, Size 4.36 GiB, ULed by ', u'Uploaded 10-26 19:23, Size 1.16 GiB, ULed by ']
>>> print link_data
[u'NLUPPER002', u'NLUPPER003']
Чтобы получить текст в точном виде, как вы упомянули, вы можете либо постобработать список, либо проанализировать данные внутри самого цикла. Например:
>>> [",".join(x.split(",")[:2]).replace(" ", " ") for x in uploaded]
[u'Uploaded 10-29 18:50, Size 4.36 GiB', u'Uploaded 10-26 19:23, Size 1.16 GiB']
P.S. если вы являетесь поклонником понимания списка, решение может быть выражено в виде одной строки:
output = [(f.contents[0], f.a.contents[0]) for f in soup.findAll("font", {"class":"detDesc"})]
Это дает вам:
>>> output # list of tuples
[(u'Uploaded 10-29 18:50, Size 4.36 GiB, ULed by ', u'NLUPPER002'), (u'Uploaded 10-26 19:23, Size 1.16 GiB, ULed by ', u'NLUPPER003')]
>>> uploaded, link_data = zip(*output) # split into two separate lists
>>> uploaded
(u'Uploaded 10-29 18:50, Size 4.36 GiB, ULed by ', u'Uploaded 10-26 19:23, Size 1.16 GiB, ULed by ')
>>> link_data
(u'NLUPPER002', u'NLUPPER003')