新的一年想着提升能力,那就做一个自己没有做过的事情,那就搞一下爬虫吧。自己给自己提了一个这样一个需求:爬取电影天堂最近两天更新的内容电影并把提取到的信息推送到钉钉机器人中。同时把这个代码放到青龙面板中就可以实现每天自动推送消息。
实现的效果:通过钉钉消息就可以看到每天更新的电影信息,如果感兴趣,就可以复制链接下载。
程序代码
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import datetime
import requests
import re
from lxml import etree
#发送钉钉消息
#定义发送给钉钉机器人的消息
def Send_dingding_info(messagetitle,message):
data = {
"msgtype": "markdown",
"markdown": {
"title": messagetitle,
"text":message,
}
}
try:
requests.post('https://oapi.dingtalk.com/robot/send?access_token=这里放置你的钉钉webhook', json=data)
except Exception as e:
print(e) #打印异常说明
return
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.188'
}
#需要爬取的电影天堂地址
url='https://www.dytt.to/index.html'
req=requests.get(url,headers=headers)
#req.encoding='gb2312'
#获取电影信息&发送信息
def getmessage(pagelink,messagenum):
page=requests.get(pagelink,headers=headers)
pagehtml=etree.HTML(page.text)
imagelink=pagehtml.xpath('//div[@id="Zoom"]//img/@src')
magnetlink=pagehtml.xpath('//div[@id="Zoom"]//a/@href')#下载链接
inf=re.findall(r"◎译 名.*?<br /><br />",page.text)
addninf=inf[0].replace('<br />','\n> ###### ')
takeerrorinf=addninf.replace(' ',' ')
#print(addninf)
#调用发送消息函数发送消息
Send_dingding_info("# 最新电影推荐","## 今日更新第"+str(messagenum)+"部电影 \n>"+"###### "+takeerrorinf+"\n >"
" ![screenshot](imagelink[0])\n>"
+"[磁力链接](magnetlink[0]) \n>"+""+"电影推送 \n>")
print("Send OK")
html=etree.HTML(req.text)
movieType=html.xpath('//div[@class="co_content8"]//td/a[1]/text()')
hrefs=html.xpath('//div[@class="co_content8"]//td/a[2]/@href')
Dates=html.xpath('//div[@class="co_content8"]//td/font/text()')
#print(movieType[0],hrefs[0],Dates[0])
Pagenum=0
messagenum=1
for page in hrefs:
checkdate=(datetime.datetime.now()+datetime.timedelta(days=-1)).strftime("%Y-%m-%d")
if movieType[Pagenum]=="最新电影下载" and Dates[Pagenum]>=checkdate:
pagelink='https://www.dytt.to'+page
getmessage(pagelink,messagenum)
messagenum=messagenum+1
Pagenum=Pagenum+1
钉钉webhook消息获得方法
具体可以参考下面的文章
总结
通过这一周的学习,学习了解Xpath的使用方法,还有简单的正则表达式。