~日常想买单车,所以自己搞py爬了一波睿思

背景:

~哎,感觉每天用自己这衰老的身体走动好累的,所以又萌发出了买一辆自行车的冲动,首先肯定是溜去睿思瞧瞧,然而发现挺多好车的~然而都出手了,So!!!自己动手爬最新信息发到邮件的岂不是美滋滋!!!用py写东西是真的舒服,各种包各种调,想起当年用世界上最好的语言发邮件的时候的苦呀~

基本思想:

先找到RS的普通交易url,找到每个标题的url,先判断url中是否有我想要的”车”这个关键词,如果有,那么再爬其url,找到其主要内容,用邮件发到我的邮箱,然后1个小时爬一次(毕竟自己人。这样就可以获取到最新的消息啦!

PY:

这里我用的新浪邮箱发送

#coding:utf-8
import requests
from bs4 import BeautifulSoup
import time
import smtplib  # 加载smtplib模块
from email.mime.text import MIMEText  #发邮件所用包
from email.utils import formataddr

my_sender = '发送人地址'  # 发件人邮箱账号,为了后面易于维护,所以写成了变量
my_user = '收件人地址'  # 收件人邮箱账号,为了后面易于维护,所以写成了变量

def mail(content):
    ret = True
    try:
        msg = MIMEText(content, 'plain', 'utf-8') #这里是邮件内容
        msg['From'] = formataddr(["xduer", my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
        msg['To'] = formataddr(["wrm", my_user])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号
        msg['Subject'] = "it is subject"  # 邮件的主题,也可以说是标题

        server = smtplib.SMTP("smtp.sina.cn", 25)  # 发件人邮箱中的SMTP服务器,端口是25
        server.login(my_sender, "发件人密码")  # 括号中对应的是发件人邮箱账号、邮箱密码
        server.sendmail(my_sender, [my_user, ], msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
        server.quit()  # 这句是关闭连接的意思
    except Exception:  # 如果try中的语句没有执行,则会执行下面的ret=False
        ret = False
    return ret


#ret = mail()
# if ret:
#     print("ok")  # 如果发送成功则会返回ok,稍等20秒左右就可以收到邮件
# else:
#     print("filed")  # 如果发送失败则会返回filed
dire1 = { '破单车': '666' }; #建立一个字典,字典的作用就是判断这个标题是否有发送过
url = 'http://rs.xidian.edu.cn/forum.php?mod=forumdisplay&fid=110'#要爬的地址URL,这里以睿思为例
res = requests.get(url)
res.encoding = 'utf-8'
text = res.text
soup = BeautifulSoup(text,'html.parser') #唔,BeautifulSoup可以了解一波
times = 5 #这里是设置爬虫爬几次就暂停
url = 'http://rs.xidian.edu.cn/'
mark = 0 #标记为未爬过
while(times):
    times = times-1
    header = soup.find_all('a',attrs={'class':'s xst'}) #爬下这个网站标签为a,class为...的内容
    for i in header: #内容以数组的形式存在着,那么循环判断
        content = i.text #拿出里面的内容
        for j in range(len(content)):
             if(content[j]=='车'): #当内容存在车这个关键字的时候,判断这个标题是否被爬过
                if (dire1.get(content) == None): #只有没爬过的才发送
                    dire1[content] = 1
                    content_url = url+i['href']#找到标题的href然后点进去,拿到第一个内容
                    res2 = requests.get(content_url)
                    res2.encoding = 'utf-8'
                    text2 = res2.text
                    soup2 = BeautifulSoup(text2, 'html.parser')
                    result = soup2.find_all('td',attrs={'class':'t_f'})
                    if(mark==0): #只有爬过一次,然后新发的消息才会有一个邮件的发送,如果不想要查看第一次的结果,将其设置为1即可
                        #print(i.text+result[0].text) #如果想发送邮件,那么注释这句并执行mail()即可
                        #这里i.text是标题,result[0].text为点进标题作者的内容
                        ret =  mail(i.text+result[0].text)
                        if ret:
                            print("ok")  # 如果发送成功则会返回ok,稍等20秒左右就可以收到邮件
                        else:
                            print("filed")  # 如果发送失败则会返回filed
    time.sleep(60 * 60)  # 让代码休息60*60s,毕竟我电的网站,还是不要爆破
    mark=1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值