爬虫自动定时获取查重结果并将结果发送至指定邮箱

该博客介绍了如何利用Python爬虫技术自动化查询期刊论文查重服务的状态,并在结果生成后通过邮件发送。首先,分析了网页的POST请求参数,然后通过构造URL并使用GET请求获取数据。接着,设置了定时任务每两小时查询一次,并将查重报告以邮件形式发送到指定邮箱。最后,提供了邮件发送的代码实现,包括QQ邮箱的授权码设置和SMTP发送邮件的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

期刊论文查重,但是查询结果较慢(1-2天),总是手动刷新网站速度很繁琐,这时爬虫技术就可以派上用场了

url

给的查询地址很简陋,基本上这些个saler的页面都一样,也没有任何反爬措施,我们只要在这里输入订单号就可以查询了
在这里插入图片描述
与以往不同的是,我们通常会爬取静态网页,但这次任务中我们需要输入订单号,再点击查询报告按钮页面才会更新,才能看到查重报告是否生成。所以直接get(url)不会有任何结果

  • 思路
    显然我们需要分析网页,这类需要提交参数才会返回数据的爬虫任务可以很自然的想到查看payload参数
    在这里插入图片描述
    很明显我们点击查询后返回的网址使用了post方法,而需要提交的内容就是proCodetypemidtid,其中tid就是你的订单号。
    但我们在requests.post()方法中添加这四个参数仍旧无法返回数据,其实稍加思考就能够破解这个问题,那就是点击view source
    在这里插入图片描述
    在这里插入图片描述
    这个格式是否就非常眼熟了呢?没错,这就是常用的url的格式,只要把这个格式加个“&”复制进url里即可,这个时候在去get就可以正常得到查重结果了
I = []
def cyq():
    url = "http://cx.bilunwen.com/qk/checkport&proCode=dfj&type=qk&mid=529&tid=xxxxxxxxxxxxx"
    #pp = json.dumps(para2)
    res = requests.get(url)
    soup = BeautifulSoup(res.text, "html.parser")
    tb = soup.find_all("tbody", {"class":"template-Container"})
    td = tb[0].find_all("td")
    for i in td:
        #print(i.text)
        I.append(i.text)
    return I 
c = cyq()
c = [i for i in c if i != ''] #去除空值
d = str(c).replace(' ', "") #删除空格

设定一个定时查询

import time


def sleeptime(hour, min, sec):
    return hour * 3600 + min * 60 + sec


second = sleeptime(2, 0, 0)
while 1 == 1:
    time.sleep(second)
    print("查询开始")
    c = cyq()
    c = [i for i in c if i != '']
    d = str(c).replace(' ', "")
    postEmail(d)
# 这是隔2小时执行一次

如果晚上已经睡觉了没法看爬虫结果,就可以再设定一个爬虫结果发送至个人邮箱(以QQ邮箱为例)

from smtplib import SMTP_SSL
from email.mime.text import MIMEText
from email.header import Header

def postEmail(text):
    #第三方服务(qq)
    mail_host = 'smtp.qq.com' #因为我们要用qq邮箱
    mail_user = '你的qq账号' #账号
    mail_pws = 'xxx' #授权码(看下方教程)

    #登录
    smtp = SMTP_SSL(mail_host)  #实例化
    smtp.ehlo(mail_host)
    smtp.login(mail_user,mail_pws)#登录

    #我和对方的邮件地址
    my_mail = 'xxxxxxx@qq.com' #自己的邮箱地址
    her_mail = 'xxxxx@163.com' #要发送的邮箱地址

    #写入的内容
    cont = text
    #标题
    title = '查重报告'

    #内容格式化
    msg = MIMEText(cont,'plain','UTF-8') #plain为txt格式,如果直接写txt的话,会被检测为垃圾邮箱
    msg['Subject'] = Header(title,'UTF-8') 
    msg['From'] = "xxxxx@qq.com" #这里有填写您的邮箱地址格式,对方才会知道发件人是谁,要不然对方默认为(无发件人)
    msg['To'] = '我的好友' #这个要注意!这里只能填字符串,如果填其他的数据类型就会报错!
    smtp.sendmail(my_mail, her_mail, msg.as_string())
        # smtp.quit()

    smtp.quit() #关闭SMTP,邮箱信息传输
    
    
postEmail("报告处理中")

其中授权码可以在qq邮箱里(设置 → \to 帐户)找到
在这里插入图片描述
点击开启后就会生成授权码,复制进代码里即可

测试结果
在这里插入图片描述
早上起来看一下邮箱就知道结果出来了没有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Infinity343

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值