期刊论文查重,但是查询结果较慢(1-2天),总是手动刷新网站速度很繁琐,这时爬虫技术就可以派上用场了
url
给的查询地址很简陋,基本上这些个saler的页面都一样,也没有任何反爬措施,我们只要在这里输入订单号就可以查询了
与以往不同的是,我们通常会爬取静态网页,但这次任务中我们需要输入订单号,再点击查询报告按钮页面才会更新,才能看到查重报告是否生成。所以直接get(url)不会有任何结果
- 思路
显然我们需要分析网页,这类需要提交参数才会返回数据的爬虫任务可以很自然的想到查看payload参数
很明显我们点击查询后返回的网址使用了post方法,而需要提交的内容就是proCode、type、mid、tid,其中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
→帐户)找到
点击开启后就会生成授权码,复制进代码里即可
测试结果
早上起来看一下邮箱就知道结果出来了没有