自動檢測CSDN部落格文章閱讀次數的爬蟲

2021-08-04 21:59:32 字數 4626 閱讀 6117

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...