美体bsObj.查找(“标题”)fai

2024-06-09 16:52:50 发布

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

我对python的web抓取还不熟悉,用beauthoulsoup来解析一个web并发送邮件,但是,,,我想这是关于当我试图解析web时出现一些参数错误,,, 我可以收到邮件,但是,, 我总是收到“不是乔”的邮件,, 但网上显示乔,,, 我怎么能收到“是乔”的邮件?? 感谢所有回答我的人!我用python3,web端http://www.douban.com/people/25698302/

# -*- coding:utf-8 -*-
import smtplib
from email.mime.text import MIMEText
from bs4 import BeautifulSoup
from urllib.request import urlopen
import time

def sendMail(subject, body):
    msg = MIMEText(body)
    msg['Subject'] = subject
    msg['From'] = "myMialServer@myms.com"
    msg['To'] = "toMyAmail@myAmail.com"

    s = smtplib.SMTP('localhost')
    s.send_message(msg)
    s.quit()

bsObj = BeautifulSoup(urlopen("http://www.douban.com/people/25698302/"))
while(bsObj.find("title") == "Joe"):
    sendMail("it is Joe!","It's Joe")

bsObj = BeautifulSoup(urlopen("http://www.douban.com/people/25698302/"))
sendMail("It's not Joe","It's not Joe")

Tags: fromimportcomwebhttpwww邮件msg
2条回答

首先,您不想使用whilewhile是一个循环,这意味着您的代码将继续发送“It's Joe”的电子邮件(无限循环),因为bsObj变量在循环内不会改变。在

接下来,如果您打印出bsObj.find("title"),您会发现输出是:

<title>
Joe
</title>

所以,它不等于“乔”。为什么循环总是失败。
你可以使用bsObj.find('title').text().strip()来得到你想要的。在

显而易见的推论是,您的while循环条件在第一次求值时为false,因此循环体执行零次。在

一些实验表明bsObj.find("title")的值是

<title>
Joe
</title>

它的计算结果显然不等于"Joe"。您还将发现bsObj.find("title").text是{},这与您正在测试的内容非常接近。在

相关问题 更多 >