最近有一件很是難過以及無限悲傷的事情發生了,那就是Firebug中止更新和維護了!!css
Firebug做爲一款前端調試工具,同時也是我接觸的第一款前端工具(雖然我僅使用它來分析網頁結構,以便於本身爬蟲項目的編寫),尤爲是它的簡介的界面,以及firexpath插件提供的xpath和css路徑查詢,以便於本身在網頁上定位到目的信息,個人許多爬蟲練習都是這款插件陪伴個人,but it leaves me forever todays。html
Firebug最初是2006年1月由Joe Hewitt編寫,Joe也是Firefox創始者之一。在沒有Firebug等調試工具以前,JavaScript調試很是困難,找錯誤有時候就跟作噩夢通常。而做爲網頁瀏覽器 Mozilla Firefox下的一款開發類插件,Firebug集中了HTML查看和編輯、JavaScript控制檯、網絡情況監視器等多種功能,是開發JavaScript、CSS、HTML和AJAX的有效工具。前端
Firebug曾是不少前端開發者的必備工具,也有開發者是因Firebug而選擇使用Firefox。Firebug也被不少人借鑑,早在2011年,就有人在InfoQ上評論「開發工具部分如今長的都差很少了,看上去都像是Firebug」,而其中一個案例就是被Chrome借鑑成 DOM inspector。python
而實際上,Firebug停更早已有預兆。2015年末,爲了進一步提供更增強大的功能,Mazilla的工程師就在努力進行原生Firefox開發者工具(DevTools)和Firebug的整合工做。該整合項目努力把全部的Firebug特性移植到DevTools中,使得其兼容多進程,並支持遠程調試。並且,項目努力保證從Firebug到DevTools的轉變過程儘量平緩和簡單,不影響用戶體驗。從結果上來看,Firebug 3也已再也不是一個單獨的工具,而是DevTools之上的一個外殼。它爲DevTools提供了與以前版本Firebug相同的主題。用戶可經過點擊Firebug Theme選項打開主題。Firebug停更,至關於去掉了DevTools的一層外殼。數據庫
現在,瀏覽器調試工具已有不少可選項,雖然Firebug離開了歷史舞臺,但它曾經的熒光陪伴了不少開發者。瀏覽器
現在,我使用的是Firefox Developer Edition,換成中文來講就是「火狐開發者版」,怎麼說呢,我的以爲這個明顯沒有Firebug好用(多是由於剛用!!),在官網下載的是英文版,若是想要更換爲中文版,首先須要去http://ftp.mozilla.org/pub/firefox/releases/57.0b11/win64/xpi/zh-CN.xpi下載中文庫,而後在火狐瀏覽器地址框輸入about:config,搜索useragent.locale,將其值設置爲zh-CN,重啓瀏覽器便可,記得下載中文庫的時候要注意連接上的57.0b11是瀏覽器的版本號,win64是系統是什麼,須要根據你本身的火狐瀏覽器和電腦系統版本進行修改。服務器
訪問目的地址咱們能夠看到如上圖所示的網頁信息,咱們的需求就是爬取各個宣講會的名字,時間,地點,主辦方,將這些信息經過QQ的SMTP服務器將郵件發送至個人郵箱中。網絡
首先分析目的地址的網頁結構:app
再繼續看下一個的:編輯器
<ul class="global_tx_list4"> <li><span class="box_r">10-25</span><a href="/?viewnews-9909.cfm">【宣講會】國金黃金股份有限公司</a></li> <li><span class="box_r">10-25</span><a href="/?viewnews-9907.cfm">【宣講會】雅迪科技集團有限公司</a></li> <li><span class="box_r">10-25</span><a href="/?viewnews-9906.cfm">【宣講會】長威信息科技發展股份有限公司</a></li> <li><span class="box_r">10-25</span><a href="/?viewnews-9904.cfm">【宣講會】中廣核俊爾新材料有限公司</a></li> <li><span class="box_r">10-24</span><a href="/?viewnews-9898.cfm">【宣講會】世紀金源集團</a></li> <li><span class="box_r">10-23</span><a href="/?viewnews-9877.cfm">【宣講會】福建恆安集團有限公司</a></li> <li><span class="box_r">10-22</span><a href="/?viewnews-9871.cfm">【宣講會】東南衛視廣告部</a></li> <li><span class="box_r">10-22</span><a href="/?viewnews-9870.cfm">【宣講會】廈門海實科技有限公司</a></li> <li><span class="box_r">10-21</span><a href="/?viewnews-9865.cfm">【宣講會】綠康生化股份有限公司</a></li> <li><span class="box_r">10-21</span><a href="/?viewnews-9864.cfm">【宣講會】廈門蓓護護理用品有限公司</a></li> <li><span class="box_r">10-19</span><a href="/?viewnews-9850.cfm">【宣講會】福建新意科技有限公司</a></li> </ul>
能夠發現各個公司的各自的宣講會信息的網頁就在其中的a標籤下的href下。只須要提取其href便可。
#可使用.get('href')獲取標籤內的href屬性的值
經過上面獲取的href很明顯,只是正確網址的後面一段,咱們須要對其進行拼接,隨意打開一個宣講會,咱們就會發現其前部分網址是:http://career.fjnu.edu.cn。將前部分和後部分進行拼接,便可獲得咱們所須要的宣講會的網址。而後再寫一個函數,專門來處理宣講會網址。
觀察宣講會的網頁:
整個宣講會的正文都在一個id爲article_body的div標籤下,而咱們只須要前三行,因此經過split(‘\n’)進行分割,再拼湊前三行,使用strip()函數來去掉先後的空白符號。
需求分析:
那咱們首先須要瞭解STMP:
SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。SMTP協議屬於TCP/IP協議簇,它幫助每臺計算機在發送或中轉信件時找到下一個目的地。經過SMTP協議所指定的服務器,就能夠把E-mail寄到收信人的服務器上了,整個過程只要幾分鐘。SMTP服務器則是遵循SMTP協議的發送郵件服務器,用來發送或中轉發出的電子郵件。
設置--帳戶--(POP3/SMTP服務)開啓--(IMAP/SMTP服務)開啓--(會分別獲得兩個受權碼,受權碼就是你在第三方登入時所使用的密碼)
POP3/SMTP受權碼:
IMAP/SMTP受權碼:
這兩個受權碼都是可使用的。
三、發送郵件實例:
# -*- coding:utf-8 -*- import smtplib#用來發送郵件 from email.mime.text import MIMEText#用來打包內容 #就是用來包裝郵件的 msg = MIMEText("你們好,我是VAE,這是我發表的首張首創專輯自定義裏面的","plain","utf-8")#第一個參數是發送的內容,第二個參數選擇發生的是純文本(plain),第三個是編碼格式utf-8 msg['Subject'] = "郵件標題" msg['From'] = "3323614864@qq.com"#發送源郵箱 msg['To'] = "913799761@qq.com"#目的源郵箱 server = smtplib.SMTP_SSL("smtp.qq.com",465)#實例化騰訊的郵件(smtp)服務器 server.set_debuglevel(1)#設置調試模式 server.login("3323614864@qq.com","********")#登陸上面實例化的郵件服務器,第一個發送源郵箱賬號,第二個參數發送源受權碼 server.sendmail("3323614864@qq.com",["913799761@qq.com"],msg.as_string()#發送郵件 server.quit()#退出服務器
最後,所有代碼實現爬取+發送郵件:
# -*- coding:utf-8 -*- import requests from bs4 import BeautifulSoup import lxml import re import smtplib from email.mime.text import MIMEText def Spiderman(url): user_agent = r'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0' headers = {'User-Agent': user_agent} #url = r'http://career.fjnu.edu.cn/?viewnews-9909.cfm' response = requests.get(url,headers=headers) if response.status_code != 200: response.encoding = 'utf-8' print('很抱歉,訪問失敗,訪問狀態碼爲:'+response.status_code+'請查詢緣由') soup = BeautifulSoup(response.text,'lxml') #time = soup.find('span').get_text().strip() time02 = soup.find('div',id='article_body') #print(time02.get_text().strip()) #place = soup.find(text=re.compile('地點')).strip() #person = soup.find(text=re.compile('主辦')).strip() #dic = {} #dic['time'] = time #dic['place'] = place #dic['person'] = person s2 = time02.get_text().strip().split('\n') return (s2[0:3]) def Spider(url): user_agent = r'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0' headers = {'User-Agent':user_agent} r = requests.get(url,headers=headers) if r.status_code != 200: r.encoding = 'utf-8' print('很抱歉,訪問失敗,訪問狀態碼爲:'+r.status_code+'請查詢緣由') soup = BeautifulSoup(r.text,'lxml') companys = [] company_names = soup.find_all(href=re.compile("/?viewnews-\d+\.cfm"),title=False) print(company_names[0].get_text()) for company_name in company_names: company_name_href = r'http://career.fjnu.edu.cn'+company_name.get('href').strip() companys.append(company_name_href) print(companys) messages = '' for company,i in zip(companys,range(0,len(companys))): list = [] list = Spiderman(company) messages =messages+company_names[i].get_text().strip()+'\n'+list[0]+'\n'+list[1]+'\n'+list[2]+'\n'+'\n'+'\n' try: msg = MIMEText(messages,'plain','utf-8') msg['Subject'] = "今日爬取" msg['From'] = "3323614864@qq.com" msg['To'] = "913799761@qq.com" server = smtplib.SMTP_SSL("smtp.qq.com", 465) server.login("3323614864@qq.com", "*********") server.sendmail("3323614864@qq.com", ["913799761@qq.com"], msg.as_string()) server.quit() print('郵件發送成功') except: print('郵件發送失敗') if __name__ == '__main__': url = r"http://career.fjnu.edu.cn/?category-51.cfm" print('正在爲您爬取,請稍後') try: Spider(url) print("恭喜您爬取成功") except: print("很抱歉,由於某些緣由,爬取失敗")
# -*- coding:utf-8 -*- import requests from bs4 import BeautifulSoup import lxml import re import smtplib from email.mime.text import MIMEText
二、第二步建立兩個函數,if __name__ =='__main__':使得文件做爲腳本直接執行
def Spiderman(url): #爬取單個宣講會的詳細信息 pass def Spider(url): #爬取宣講會的網址信息 pass if __name__ == "__main__": url = r"http://career.fjnu.edu.cn/?category-51.cfm" Spider(url) pass
三、完善爬取宣講會網址的函數
def Spiderman(url): #爬取單個宣講會的詳細信息 pass def Spider(url): user_agent = r'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0' headers = {'User-Agent':user_agent} r = requests.get(url,headers=headers) if r.status_code != 200: r.encoding = 'utf-8' print('很抱歉,訪問失敗,訪問狀態碼爲:'+r.status_code+'請查詢緣由') soup = BeautifulSoup(r.text,'lxml') companys = [] company_names = soup.find_all(href=re.compile("/?viewnews-\d+\.cfm"),title=False) print(company_names[0].get_text()) for company_name in company_names: company_name_href = r'http://career.fjnu.edu.cn'+company_name.get('href').strip() companys.append(company_name_href) print(companys) messages = '' for company,i in zip(companys,range(0,len(companys))): list = [] list = Spiderman(company) messages =messages+company_names[i].get_text().strip()+'\n'+list[0]+'\n'+list[1]+'\n'+list[2]+'\n'+'\n'+'\n' try: msg = MIMEText(messages,'plain','utf-8') msg['Subject'] = "今日爬取" msg['From'] = "3323614864@qq.com" msg['To'] = "913799761@qq.com" server = smtplib.SMTP_SSL("smtp.qq.com", 465) server.login("3323614864@qq.com", "*********") server.sendmail("3323614864@qq.com", ["913799761@qq.com"], msg.as_string()) server.quit() print('郵件發送成功') except: print('郵件發送失敗') if __name__ == '__main__': url = r"http://career.fjnu.edu.cn/?category-51.cfm" print('正在爲您爬取,請稍後') try: Spider(url) print("恭喜您爬取成功") except: print("很抱歉,由於某些緣由,爬取失敗")
四、完善爬取單個宣講會的信息的函數
def Spiderman(url): user_agent = r'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0' headers = {'User-Agent': user_agent} #url = r'http://career.fjnu.edu.cn/?viewnews-9909.cfm' response = requests.get(url,headers=headers) if response.status_code != 200: response.encoding = 'utf-8' print('很抱歉,訪問失敗,訪問狀態碼爲:'+response.status_code+'請查詢緣由') soup = BeautifulSoup(response.text,'lxml') #time = soup.find('span').get_text().strip() time02 = soup.find('div',id='article_body') #print(time02.get_text().strip()) #place = soup.find(text=re.compile('地點')).strip() #person = soup.find(text=re.compile('主辦')).strip() #dic = {} #dic['time'] = time #dic['place'] = place #dic['person'] = person s2 = time02.get_text().strip().split('\n') return (s2[0:3])
運行程序:
提示:開啓stmp服務器,須要已經開通QQ郵箱14天,另外QQ郵箱的STMP服務器天天發送的郵件是有數量限制的,能夠百度一下。
----------------------------
11.4再次實驗,出了點問題,有空再處理下