1. 程式人生 > >使用Python3和BeautifulSoup爬取笑話網站內容,並匯入Excel

使用Python3和BeautifulSoup爬取笑話網站內容,並匯入Excel

本文使用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')  #這裡寫要儲存的路徑

下面是執行後的效果。