2. 然後每次將資料庫裡的資料與部落格裡的資料進行對比
3. 再將有差別的記錄下來,具體資訊放到郵件中傳送給我
4. url中list後面是頁數,當頁數特別大時就顯示所有文章,不用分頁
5. 文章資訊摘取使用beautifulsoup庫,巢狀了幾層終於提取了所有資訊
6. 寫完指令碼放到伺服器裡,開乙個計畫任務,寫乙個shell讓它自動執行就好了
# -*- coding=utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
import urllib2
import mysqldb
import time
from bs4 import beautifulsoup
import smtplib
from email.mime.text import mimetext
from email.header import header
defdownload
(url):
try:
html = urllib2.urlopen(url).read()
except urllib2.urlerror as e:
print
"error"
print e.code # 可以列印出來錯誤代號如404。
print e.reason # 可以捕獲異常
html = none
return html
defemail
(text ,toemail):
sender = "[email protected]"
#傳送方的郵箱
password = ""
#郵箱的授權碼
receiver = toemail #接收方的郵箱
data_time = time.strftime("%y-%m-%d")
subject = data_time + "的csdn部落格報告"
#title郵件標題
words = text #text郵件內容
smtpserver = 'smtp.exmail.qq.com'
msg = mimetext(words, 'plain', 'utf-8')#中文需引數『utf-8',單位元組字元不需要
msg['subject'] = header(subject, 'utf-8') #郵件標題
msg['from'] = sender #發信人位址
msg['to'] = receiver #收信人位址
smtp = smtplib.smtp_ssl("smtp.exmail.qq.com", 465)
smtp.connect('smtp.exmail.qq.com')
smtp.login(sender, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()
print data_time + "的郵件傳送成功!"
defoperator_sql
(flag,update=none):
# 將獲取的資料存入資料庫中
try:
conn = mysqldb.connect(
host='127.0.0.1',
port=3306,
user='root',
passwd='root',
db='test',
charset='utf8',
)except:
conn = mysqldb.connect(
host='127.0.0.1',
port=3306,
user='test',
passwd='',
db='test',
charset='utf8',
)cur = conn.cursor()
if flag == 1:
res = cur.execute("select * from csdn_article")
cur.execute(
'insert into csdn_article values("%s","%s", "%s", "%s", "%s")' % (res + 1, update[0], update[1], update[2], 0))
elif flag == 2:
cur.execute("update csdn_article set article_read="+str(update[1])+" where article_id = "+str(update[0]))
cur.execute("update csdn_article set change_read=" + str(
update[3]) + " where article_id = " + str(update[0]))
elif flag == 3:
res = cur.execute("select article_read from csdn_article where article_id="+str(update))
if res == 1:
res = cur.fetchmany(res)[0][0]
elif res == 0:
res = -1
return res
# sql_list = list(cur.fetchmany(res))
# print sql_list[1].count(435)
# if 435 in sql_list:
# print '432432443242'
cur.close()
conn.commit()
conn.close()
defextract
(html):
soup = beautifulsoup(html)
comment = soup.find(attrs=).text
article_soup = soup.find_all(attrs=)
article_all_list =
for value in article_soup:
# 根據每篇文章的特徵提取對應的資料
value = str(value)
tmp_soup = beautifulsoup(value)
article_id = tmp_soup.a['href']
article_title = tmp_soup.find('span',class_='link_title').contents[0].string
article_read = tmp_soup.find('span',class_='link_view').contents[1].string
# print article_id,article_read,article_title
# 使用了各種辦法,終於將兩個字串中的數字提取出來了
article_id = int(str.split(str(article_id),'/')[4])
article_read = int(str.split(str(article_read[1:]),')')[0])
# 然後將每一篇文章裡的資料放入乙個列表裡,再將這個列表放到大的列表裡
article_list =
# 對每個值去資料庫裡查詢,如果存在就進行比較,不相同則記錄下來,並去資料庫中修改,如果不存在,則插入這條資料
read = operator_sql(3, article_id)
if read == -1:
operator_sql(1, article_list)
elif read != article_read:
# 將閱讀次數的查值傳入資料庫中
# print article_list[3]
operator_sql(2, article_list)
text = "您今天的csdn部落格資訊報告如下:"
text = text + str(comment)
text = text + '今日有' + str(article_all_list.__len__()) + '篇文章的閱讀數發生了變化' + '\n'
i = 1
for value in article_all_list:
# print value[0]
text = text + str(i) + ': ' + value[2] + '總閱讀次數為:'+ str(value[1]) + ';比昨天增加了:' + str(value[3]) + '次。' + '\n'
i = i + 1
# print text
return text
defmain
(): url = ''
html = download(url)
text = extract(html=html)
email(text,'[email protected]')
# operator_sql(3, 353425)
if __name__=='__main__':
main()
shell自動檢測
列印選單,讓使用者選擇,並根據選擇執行操作 如果使用者選擇的是a,顯示cpu資訊 如果使用者選擇的是b,顯示記憶體資訊 如果使用者選擇的是c,執行緒磁碟資訊 如果使用者選擇的是d,顯示網路io資訊 使用者使用者選擇的是e,退出系統 如果使用者選擇成其他選擇,提示輸入錯誤,讓使用者重新選擇 bin b...
spring 自動檢測bean
當在spring配置中增加時,我們希望spring特殊對待我們所定義的bean裡的某一組註解,並使用這些註解指導bean裝配。即使有助於完全消除spring配置中的和元素,我們仍需要使用元素顯示定義bean。但是spring還有另一種技巧。元素除了完成與一樣的工作,還允許spring自動檢測bean...
解除硬碟自動檢測
如果你的電腦不管是正常關機還是非正常關機,啟動時都自動掃瞄檢測硬碟的某個分割槽,說明硬碟出現了問題,可以使用修復軟體進行一下修復。如果硬碟沒有問題,可以考慮關閉硬碟的自動掃瞄檢測。方法有二 1 color darkred 開始 color color darkred 執行 color 輸入 colo...