先從開始,基本需求,獲取python板塊下面的新文章,間隔60分鐘傳送一次,時間太短估摸著沒有多少新部落格產出~
抓取的頁面就是這個
將文章傳送到指定郵箱,更新最後一篇文章的時間
模組清單
import requests
import time
import re
import smtplib
from email.mime.text import mimetext
from email.utils import formataddr
from email.header import header
from email.mime.multipart import mimemultipart
# 初始化資料
def __init__(self):
self.start_url = ""
self.headers =
self.pattern = r'[\s\s.]*?[\s\s.]*?[\s\s.]*?(.*?)([\s\s.]*?)'
self.last_blog_time = 0
self.need_send_articles =
引數說明
涉及**較多,我將關鍵點編寫相應的注釋
# 解析網頁內容
def get_articles(self):
try:
# 正常的資料獲取
res = requests.get(self.start_url,headers=self.headers,timeout=3)
except exception as e:
print("error %s"% e)
time.sleep(3)
return self.get_articles() # 重新發起請求
html = res.text
# 這個地方的正規表示式是考驗你正則功底的地方了
all = re.findall(self.pattern,html)
# 判斷,如果沒有新文章
last_time = self.change_time(all[0][3].strip().replace("發布於 ", ""))
if last_time <= self.last_blog_time:
print("沒有新文章更新")
return
for item in all:
public_time = item[3]
if public_time:
# 格式化時間
public_time = self.change_time(public_time.strip().replace("發布於 ",""))
if(public_time > self.last_blog_time):
"url":item[0],
"title":item[1],
"author":item[2],
"time":public_time
})# 文章獲取完畢,更新時間
self.last_blog_time = last_time
##### 測試輸出
print(self.need_send_articles)
print("現在文章的最後時間為",self.last_blog_time)
##### 測試輸出
時間字串轉換成時間戳
採用時間戳可以直接比較大小,非常方便
def change_time(self,need_change_time):
'''# 時間的轉換
:param need_change_time:
:return:返回時間戳
'''time_array = time.strptime(need_change_time, "%y-%m-%d %h:%m")
time_stamp = int(time.mktime(time_array))
return time_stamp
參考文章
# #
# #
因為我採用的是qq郵箱,所以有的地方設定起來比較麻煩,發簡訊還花了2毛錢,建議你採用其它的郵箱,設定是一樣的哦~~
你看一下上面的文章之後,就可以對郵件傳送進行相應的編寫了,非常簡單
qq郵箱是ssl認證的郵箱系統,因此用qq郵箱傳送郵件,需要建立乙個smtp_ssl物件,而不是smtp物件
# 傳送郵件
def send_email(self,articles):
smtp = smtplib.smtp_ssl() # 這個地方注意
smtp.connect("smtp.qq.com",465)
smtp.login("[email protected]", "授權碼")
sender = '[email protected]'
receivers = ['找個自己的其他郵箱@163.com'] # 接收郵件,可設定為你的qq郵箱或者其他郵箱
# 完善發件人收件人,主題資訊
message = mimemultipart()
message['from'] = formataddr(["部落格採集器", sender])
message['to'] = formataddr(["hi,baby", ''.join(receivers)])
subject = '你有新採集到的文章清單'
message['subject'] = header(subject, 'utf-8')
# 正文部分
html = ""
for item in articles:
html+=("--文章作者--發布時間
".format(title=item["title"],url=item["url"],author=item["author"],time=item["time"]))
textmessage = mimetext('新採集到的文章清單
' +html,
'html', 'utf-8')
message.attach(textmessage)
# 傳送郵件操作
smtp.sendmail(sender, receivers, message.as_string())
smtp.quit()
最後乙個步驟,如果想要持續的獲取,那麼找乙個伺服器,然後部署就行啦,有興趣的博友,繼續研究下去吧~ 爬蟲篇 部落格園搜尋爬取
寫入sql server資料庫,如下 import requests from lxml import etree import pymssql import time 連線sql server資料庫 conn pymssql.connect host 127.0.0.1 user sa passw...
python部落格園 python 模擬部落格園系統
作業 用 模擬系統。專案分析 一 首先程式啟動,頁面顯示下面5內容供使用者選擇 1.請登入 2.請註冊 3.進入文章頁面 5.進入日記頁面 6.進入收藏頁面 7.登出賬號 8.退出整個程式 二 必須實現的功能 1.註冊功能要求 a.使用者名稱 密碼要記錄在檔案中。b.使用者名稱要求 只能含有字母或者...
python部落格園 python部落格大全
python技術部落格 egon部落格 檢視密碼 xiaoyuanqujing 666 pycharm 問題搜尋 專案前端 django框架 python orm 基礎知識 多執行緒多程序 指定 f引數容易失敗,多程序要加multiprocessing.freeze support 選擇資料夾 寫入...