使用Python3和BeautifulSoup爬取笑話網站內容,並匯入Excel
阿新 • • 發佈:2019-01-25
本文使用Python3和BeautifulSoup爬取網站內容,並匯入Excel。
#抓取糗事百科笑話的指令碼 import urllib.request from bs4 import BeautifulSoup import xlwt #寫入檔案 import xlrd #開啟excel檔案 import time #返回文字式的html def getHTML(url): #給標頭檔案偽裝成瀏覽器訪問 headers = {'User-Agent': 'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'} req = urllib.request.Request(url, headers=headers) return urllib.request.urlopen(req).read() #返回一個bs4_url物件 def creatSoup(url): html_text = getHTML(url) soup_0 = BeautifulSoup(html_text,'html5lib') return soup_0 #新建Excel檔案和其中的一個sheet,注意傳的引數是字串格式,新建完在空間中開啟,直接使用write寫入資料 def creatExcelAndSheet(sheetName): #新建一個excel檔案 file = xlwt.Workbook(encoding = 'utf-8', style_compression = 0) #新建一個sheet sheet = file.add_sheet(sheetName) #返回開啟的sheet物件 return sheet,file #執行寫入Excel的程式。引數含義 a-選擇寫入行,b-選擇寫入列,c-選擇寫入的內容(字串型別) def writeToSheet(a,b,c): sheet.write(a,b,c) #抓取結束的提示資訊,分別是頁迴圈次數和內容迴圈次數,由於結束之前頁和內容迴圈數還會+1.所以summary要-1 def summaryAllContent(a,b,url): print('提示:抓取結束,無更多內容!') print('------------------Summary------------------') print('您抓取的網址為%s'%url) print('共抓取 %d頁 共 %d個內容'%(a-1,b-1)) print('-------------------------------------------') #得到每一條內容的處理函式,根據不同的html需要修改 def getEachContent(eachContent): a = eachContent.select('div')[0] b = a.select('span')[0] sss = '' for s in b.strings: sss+=s return sss sheet,file = creatExcelAndSheet('data') i = 1 k = 1 while i <24: # url = 'https://www.qiushibaike.com/8hr/page/1/?s=4991834' 根據url多頁的特性,找到翻頁的一個引數 url = 'https://www.qiushibaike.com/8hr/page/' + str(i) + '/?s=4991834' soup = creatSoup(url) a_soup = soup.select('a[class=contentHerf]') #根據關鍵字取得按list存放的內容 contentLen = len(a_soup) #取得列表長度 print('Info: 第%d頁有%d個笑話'%(i,contentLen)) for eachContent in a_soup: sss = getEachContent(eachContent) writeToSheet(k,0,k) writeToSheet(k,1,sss) print('正在獲取第%d個內容...Done'%k) time.sleep(0.05) k+=1 print('提示: 正在獲取下一頁內容...') i += 1 time.sleep(3) summaryAllContent(i,k,url) file.save('C:/Users/me/Desktop/糗事百科Data.xls') #這裡寫要儲存的路徑
下面是執行後的效果。