Python爬虫初体验,爬取西安本地宝公开数据

  几天前,听说了九价疫苗这个东西,搏一搏女神欢心,就试着抢了一下,没抢到,但是也不知道下一次什么时候开始抢,所以就想着做了个爬虫去获取预约信息,能够及时的通知到我。
  以前也没有写过Python方面的东西,自己也不会,但是之前看过几个老哥写的一些例子,凭着自己的强大的学习能力,半天时间就高出来了,顺便也部署好了,哈哈,好简单啊
  废话不多说,直接上代码,然后讲思路。


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


# 按间距中的绿色按钮以运行脚本。
def getHtml():
    # 先获取网页内容
    url = 'http://xa.bendibao.com/live/2019422/67045.shtm'
    response = rq.get(url)
    # 获取了内容后发现中文乱码,于是修改了编码格式
    result = response.text.encode(response.encoding).decode(response.apparent_encoding)
    # 将文字内容转为这个对象去管理,也好方便获取内容
    soup = BeautifulSoup(result, 'lxml')
    # 获取class为content的那个标签所有信息
    content = soup.find(attrs={'class': 'content'})
    # 获取所有的文字信息,找到第一个开头为更新时间的那一段
    for span in content.strings:
        if span.lstrip().startswith('更新时间'):
            update_time = span.lstrip()
            # 截取更新时间后面的字符串,并转为时间戳
            time1 = get_timestamp_from_format_time(update_time.split('更新时间:')[1])
            # 获取当前的时间,并跟当前时间做比较
            time2 = time.time()
            print(time2)
            print(time1)
            print(time1 < time2)
            print((time2 - time1) < 172800)
            # 发布时间距今日两天内,则发送邮件通知,否则直接下一次获取
            if (time2 - time1) < 172800:
                send_email(update_time)
            return


def send_email(update_time):
    # 第三方 SMTP 服务
    mail_host = "smtp.163.com"  # 设置服务器
    mail_user = "XXX@XXX.com"  # 发送方的用户名
    mail_pass = "XXXXXXX"  # 口令,邮箱的POP3协议口令,也就相当于密码

    sender = 'XXX@163.com' # 发送方的邮箱,没啥用了,跟上面的重复了
    receivers = ['XXX0@qq.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

    # 消息文本内容
    message = MIMEText('今日九价疫苗预约公告已发布,请尽快确认,公告最近更新时间为' + update_time, 'plain', 'utf-8')
    message['From'] = Header("程序提醒", 'utf-8')
    message['To'] = Header("测试", 'utf-8')
    # 消息标题
    subject = '今日九价疫苗预约公告已发布,请尽快前往确认预约时间'
    message['Subject'] = Header(subject, 'utf-8')

    try:
        # 这块本来使用的是25端口去发送邮件的,但是由于用的是阿里云的服务器,在访问25端口的时候一直无响应,所以不得以更改了下面没注掉的方式去发送邮件
        # print("准备发送邮件...")
        # smtpObj = smtplib.SMTP()
        # print("已连接服务器...")
        # smtpObj.connect(mail_host, 25)  # 25 为 SMTP 端口号
        # print("已绑定25端口...")
        # smtpObj.login(mail_user, mail_pass)
        # print("正在发送邮件...")
        # smtpObj.sendmail(sender, receivers, message.as_string())
        # print("邮件发送成功")
        # 通过ssl方式发送,服务器地址,端口
        print("开始发送邮件....")
        s = smtplib.SMTP_SSL(mail_host, 465)
        # 登录到邮箱
        print("登录到邮箱....")
        s.login(mail_user, mail_pass)
        # 发送邮件:发送方,收件方,要发送的消息
        print("正在发送....")
        s.sendmail(mail_user, receivers, message.as_string())
        print('发送成功....')
    except smtplib.SMTPException:
        print("Error: 无法发送邮件")


def timer(n):
    """
    每n秒执行一次
    """
    while True:
        print(time.strftime('%Y-%m-%d %X',time.localtime()))
        getHtml()  # 此处为要执行的任务
        time.sleep(n)


def get_timestamp_from_format_time(format_time):
    struct_time = time.strptime(format_time, '%Y.%m.%d')
    return time.mktime(struct_time)


if __name__ == '__main__':
	# 轮询去获取需要爬取得信息,每两小时执行一次
    timer(7200)


  第一次使用python做定时任务,不会做,用了最耗资源的轮询来做,服务器自己的服务器,反正没有其他的业务在上面,也就没管那么多
  思路呢就是审查元素,取到相应的标签,然后分析,没多少技术含量
屏幕截图
  第一次写Python爬虫,还是相当顺利的,爬取的公开的数据,也不牵扯法律相关问题,而且两小时爬取一次,也不会影响网站的正常使用
  相关声明:本帖为技术讨论帖,请勿用作非法用途,若非法使用,与本技术贴无关,若侵权,请告知删帖

  • 7
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值