您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python黑科技!利用Python来查书并将信息发送到自己的邮箱!

5b51 2022/1/14 8:24:47 python 字数 6237 阅读 698 来源 www.jb51.cc/python

最近发现了一个问题,经常记了或者听到看到一些想读的书,但是又有点懒,不想一本书一本书去找,而且在学校图书馆的网站查了之后还要去记书在什么地方或者拍一下去找,于是就想能不能用selenium自动化的到学校图书馆

概述

最近发现了一个问题,经常记了或者听到看到一些想读的书,但是又有点懒,不想一本书一本书去找,而且在学校图书馆的网站查了之后还要去记书在什么地方或者拍一下去找,于是就想能不能用selenium自动化的到学校图书馆官网去抓取图书信息,然后发送到自己的邮箱。经过了几个小时的实践,发现确实可行,以下是实现过程。主要分两部分,第一部分是图书信息的抓取,第二部分是将抓取的信息发送至指定邮箱。

图书信息的抓取设想的是通过用户输入一本或多本书名,用selenium传参至图书馆网站的搜索框,模拟点击后返回搜索结果,对学校图书馆网站进行分析发现不需要登录就可以进行图书检索,因此大大简化了工作,以为只用selenium打开网页,传参,模拟点击就可以,具体的代码实现如下

driver = webdriver.PhantomJS()
driver.get('http://202.205.213.113:8080/opac/search.PHP')
driver.find_element_by_xpath('//*[@id="strText"]').send_keys(bookname)
driver.find_element_by_xpath('/html/body/div[4]/div[1]/fieldset/div/form/div/input[3]').click()

进群:5483777875   即可获取数十套PDF哦!

Python黑科技!利用Python来查书并将信息发送到自己的邮箱!

但实际检查源网页发现馆藏信息其实隐藏在另外一个链接里,具体分析这个链接发现是一个get请求的网址,因此需要进一步构造网址用requests再返回页面信息,采用pyquery对返回的页面网址进行图书在馆信息的提取,该信息保存在页面的table下的tr td标签下 ,具体代码实现如下:

提取构造网址

doc = pq(driver.page_source)
if doc('.book_list_info'):
 info = doc('.book_list_info')
 # shujia = info('h3').text()
 # status = info('p span').text()
 detailurl = 'http://202.205.213.113:8080/opac/' + info('p a').attr('href')
 return detailurl
else:
 return '没有此书'

解析返回图书信息

def getinfo(url):
 result = []
 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/62.0'}
 res = requests.get(url,headers=headers)
 detail = pq(res.text)
 binformation = []
 bookinfo = detail('.booklist').items()
 for b in bookinfo:
 binformation.append(b.text())
 dinformation = []
 for d in detail('#item tr').items():
 dinformation.append(d.text().replace('
',''))
 result.append(binformation[0].replace('
',''))
 result.append(binformation[1].replace('
',''))
 result = result + dinformation[1:]
 return result

以上部分完成了图书信息的抓取,接下来是将图书信息发送至邮箱,采用的是

smtplib模块,需要输入主题邮件正文和发送至的邮箱地址。此处隐去了发送这的邮箱和密码,需要使用者填写自己的邮箱。

def sendmail(subject,body,receiver):
 smtpserver = "smtp.163.com"
 port = 465
 sender = "xfs9619@163.com"
 psw = ""
 receiver = input('请输入你的图书信息要发送至的邮箱')
 msg = MIMEMultipart()
 msg["from"] = sender
 msg["to"] = ','.join(receiver)
 msg["subject"] = subject
 body = MIMEText(body,"plain","utf-8")
 msg.attach(body)
 try:
 smtp = smtplib.SMTP()
 smtp.connect(smtpserver) # 连服务器
 smtp.login(sender,psw)
 except:
 smtp = smtplib.SMTP_SSL(smtpserver,port)
 smtp.login(sender,psw) # 登录
 smtp.sendmail(sender,receiver,msg.as_string()) # 发送
 smtp.quit()
 return '发送成功'

最后使用input让用户输入需要的书名,将书名和抓取到的图书信息传入sendmail函数中,并返回发送结果:

if __name__ == '__main__':
 putinbook = input('请输入要发送的书籍信息,若有多本,以逗号隔开')
 booknamelist = [x for x in putinbook.split(',') if x]
 for b in booknamelist:
 url = getdetailurl(b)
 if url == '没有此书':
 res = '%s 没有找到'%b
 else:
 res = getinfo(url)
 data = '
'.join(res)
 result = sendmail('%s'%b,data)
 print(result)

程序运行的最终结果如下:

Python黑科技!利用Python来查书并将信息发送到自己的邮箱!

邮箱测试接收结果如下:

Python黑科技!利用Python来查书并将信息发送到自己的邮箱!

Python黑科技!利用Python来查书并将信息发送到自己的邮箱!

总结

以上是编程之家为你收集整理的Python黑科技!利用Python来查书并将信息发送到自己的邮箱!全部内容,希望文章能够帮你解决Python黑科技!利用Python来查书并将信息发送到自己的邮箱!所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶