BeautifulSoup4发现href

时间:2015-01-17 18:58:46

标签: python beautifulsoup

<td valign="top"><a href="/default.asp?pagetemp=standard&amp;pageload=emne&amp;emneid=102981&amp;listview=1&amp;forhandlerid=21" class="list">Mercedes</a></td>

我的代码:

for link in soup.findAll('td',{'valign':'top'}):
    ahref = link.findAll('a',{'class':'list'})
    print(ahref)

但这并没有让我回到href

预期结果:

href="/default.asp?pagetemp=standard&amp;pageload=emne&amp;emneid=102981&amp;listview=1&amp;forhandlerid=21"

如何使用class="list"查找href?

2 个答案:

答案 0 :(得分:1)

问题源于你对findAll对象的误解。 href是BeautifulSoup对象的一个​​属性,可以像字典一样访问它:

import bs4

raw = '''<td valign="top"><a href="/default.asp?pagetemp=standard&amp;pageload=emne&amp;emneid=102981&amp;listview=1&amp;forhandlerid=21" class="list">Mercedes</a></td>'''

soup = bs4.BeautifulSoup(raw)

for td in soup.findAll('td',{'valign':'top'}):
    for link in td.findAll('a', {"class":"list"}):
        print (link["href"])

结果

/default.asp?pagetemp=standard&pageload=emne&emneid=102981&listview=1&forhandlerid=21

答案 1 :(得分:0)

lxml会比BS4更好(更快)地完成工作

from lxml import etree
q = etree.fromstring('<td valign="top"><a href="/default.asp?pagetemp=standard&amp;pageload=emne&amp;emneid=102981&amp;listview=1&amp;forhandlerid=21" class="list">Mercedes</a></td>')

print(q.find("a").attrib['href'] )

输出:

/default.asp?pagetemp=standard&pageload=emne&emneid=102981&listview=1&forhandlerid=21

如果您仍然坚持使用BS4

from bs4 import BeautifulSoup

html = '<td valign="top"><a href="/default.asp?pagetemp=standard&amp;pageload=emne&amp;emneid=102981&amp;listview=1&amp;forhandlerid=21" class="list">Mercedes</a></td>'

soup = BeautifulSoup(html)
for a in soup.find_all('a', href=True):
    print "Found the URL:", a['href']

输出:

Found the URL: /default.asp?pagetemp=standard&pageload=emne&emneid=102981&listview=1&forhandlerid=21