python3爬虫实战-requests+beautifulsoup-杭电官网比赛信息实时爬取

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lxfHaHaHa/article/details/80469073
python3爬虫实战之二
有时候有比赛通知了也不清楚,就写了个爬虫,里面两种方法,一个是通过邮件方式实时获得最新比赛信息,一个是获得最近的一些比赛信息
环境先安装requests库、beautifulsiup库
qq邮箱配置方法: https://jingyan.baidu.com/article/6d704a133a245f28db51caf5.html
看心情,啥时候补个详细步骤介绍,如果我有动力的话= =

spider_contest.py

#  coding:utf-8 
##  先安装环境python3、pip环境
##  pip3 install requests
##  pip3 install BeautifulSoup4
##  sudo apt-get install python3-lxml 或者 pip3 install lxml
##  杭电官网比赛信息爬取
##  需要修改的地方是send_email方法里面的smtpServer、emailAddr、emailPass,换成自己的邮箱地址
##  qq邮箱配置方法: https://jingyan.baidu.com/article/6d704a133a245f28db51caf5.html
##  在主函数里面修改选择需要使用的方法
##  直接运行即可  python3 spider_contest.py
##  测试环境为win10-python3
##  author: lxfhahaha
##  date: 2018年5月27日13:59:21

import  requests
from bs4 import BeautifulSoup
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import time


class ContestNews:         ##比赛信息类
    def __init__(self,newsName='0',url='0',newsTime='0'):
        self.name=newsName  #标题
        self.time=newsTime  #通知时间
        self.url=url        #通知地址
    def __str__(self):
        return '地址:'+str(self.url)+'  发布时间:'+str(self.time)+' 发布内容:'+str(self.name)



def send_email(content,subject):        #发送邮件代码 ,用的是qq邮箱,发送给自己      
    #初始化邮箱设置
    # smtp服务器的地址
    smtpServer = "smtp.qq.com"
    # 邮箱服务器端口
    stmpPort=25
    # 发件箱的地址
    emailAddr = "XXXXXXXX"
    # smtp口令
    emailPass = "XXXXXXXXXX"
    # 自己发自己邮箱不容易被当垃圾邮箱拦截
    targetAddr=[emailAddr]
    try:    
        message = MIMEText(content, 'html', 'utf-8')
        message['from'] = Header("moocclub小助手", 'utf-8')
        message['to'] =  Header("Administar", 'utf-8')
        message['subject'] = Header(subject, 'utf-8')
        server=smtplib.SMTP(smtpServer,stmpPort)
        server.starttls()
        server.login(emailAddr,emailPass)
        server.sendmail(emailAddr,targetAddr,message.as_string())
        server.quit()
        print ("Success: 邮件发送成功")
    except Exception as e:
        print ("Error: 无法发送邮件--"+str(e))



def newsLatestList():     ##获得一些最新的比赛消息列表
    re=requests.get(url,headers=headers)
    listAll=[]
    soup=BeautifulSoup(re.text,'lxml')
    for one in soup.select('.newsList ul li'):
        new=ContestNews(one.find('a').get_text(),urlBase+ one.find('a').get('href'),one.find('span').get_text())
        listAll.append(new)
        print(new)
    return listAll



def newsLatestOne():    ##获得最新的一条消息
    newsOld=ContestNews()
    while True:
        re=requests.get(url,headers=headers)
        soup=BeautifulSoup(re.text,'lxml')
        one=soup.select('.newsList ul li')[0]
        new=ContestNews(one.find('a').get_text(),urlBase+ one.find('a').get('href'),one.find('span').get_text())
        if(new.url!=newsOld.url):
            content=("<p>名称:"+str(new.name)+"</p>"
                +"信息发布时间:"+str(new.time)+"</p>"
                +"信息链接:<a href='"+str(new.url)+"'>"+str(new.url)+"</a></p>")
            subject='杭电比赛最新消息-'+str(new.name)
            send_email(content,subject)
            newsOld=new
        time.sleep(300) #每5min查询一次




if __name__ == '__main__':      ##主函数入口



    url='http://jwc.hdu.edu.cn/node/400.jspx'
    urlBase='http://jwc.hdu.edu.cn/'

    headers={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
    'Referer': 'http://jwc.hdu.edu.cn/'
    }



    a=input('输入1实时获得最新比赛信息,输入2获得最近的一些信息:')
    if a=='1':newsLatestOne()
    if a=='2':newsLatestList()




选择1:
这里写图片描述

选择2:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/lxfHaHaHa/article/details/80469073