利用Python爬取獲取部落格園文章定時傳送到郵箱

2021-10-01 01:38:22 字數 3388 閱讀 7307

先從開始,基本需求,獲取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 選擇資料夾 寫入...