BeautifulSoup无法通过类名找到标签

5

这是网页的一部分:

 <div class="MPinfo">
     <ul class="frontList">
         <li>some text</li>
         <li>some text</li>
         <li>some text</li>
         <li>some text</li>
         <li>some text</li>
         <li>some text
             <a href="/some_local_link/8976">some text</a>;
             <a href="/some_local_link/8943">some text</a>;
         </li>
         <li>E-mail: 
             <a href="mailto:Ss.Sssssss@mail.com">Ss.Sssssss@mail.com</a>
         </li>
     </ul>
 </div>

我正在尝试通过其类名获取div,然后提取电子邮件链接,例如:Ss.Sssssss@mail.com。
page = urllib.urlopen(link)
soup = BeautifulSoup(page.read())
print soup.find('div', attrs={'class': 'MPinfo'})

我尝试了几种方法来获取div,但返回的结果是空列表或None


2
使用您提供的示例HTML和任何3个支持的HTML解析器,它对我有效。也许整个HTML页面格式不正确? - Martijn Pieters
1
我使用 r = requests.get(...) 加载页面,用 soup = BeautifulSoup(r.content, parser) 创建了一个 soup,并且能够在支持的任何一种解析器中轻松获取 div。很抱歉,我无法重现你的问题。 - Martijn Pieters
1
与使用 urllib.urlopen() 相同。也许您的本地网络正在使用过滤代理,并且您得到不同的数据,但是您的代码对我来说是有效的,无论我如何尝试为通常的问题切片它。 - Martijn Pieters
@VictorNikolov,如果您使用 soup = BeautifulSoup(r.content,"html.parser"),您会看到什么? - Padraic Cunningham
好的,我已经成功解决了问题。它现在可以正常打印所有的电子邮件了。目前有一个页面缺少一些内容,导致脚本出现了“列表索引超出范围”的错误,但这很容易修复。我使用的是“lxml”解析器和以下代码: soup.find('div', class_='MPinfo').find_all('a')[-1]['href'].split(':')[1].strip()感谢大家! - Victor Nikolov
显示剩余5条评论
1个回答

1
你可以选择 div 下的所有 li 元素,它们会形成一个列表,所以你可以像 [-1] 这样选择最后一个 li 元素。
>>> soup.find("div",attrs={"class":"MPinfo"}).find_all("li")[-1].a.text
'Ss.Sssssss@mail.com'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接