Python3爬蟲豆瓣電影TOP250將電影名寫入到EXCEL
阿新 • • 發佈:2019-01-05
大家好,我是你們的老朋友澤哥,最近在學習Python3.6,於是興起寫了個小小的爬蟲
附上截圖!
我們要獲得TOP250對應的電影名,開啟F12對HTML報文進行解讀
電影名對應的HTML程式碼如下:
<span class="title">肖申克的救贖</span>
整體程式碼如下:
檔案:get_movieReview.py
from urllib import request from urllib import error import re import excel excel_name = 'excel/douban_hot_review.xls' sheet_name = '豆瓣影評' '''建立一個excel''' douban_excel = excel.Excel(excel_name,sheet_name) class DouBanSpider(object): ''' 資料成員: page: 表示當前處理的頁面 cur_url: 表示當前準備抓取的頁面 ''' def __init__(self): self.page = 1 self.cur_url = 'http://movie.douban.com/top250?start={page}&filter=&type='#{page}是可以代替的 self.top = 0 print('開始工作') ''' cur_page:表示當前處理的介面 return:返回抓取的整個介面的HTML(uicode編碼) ''' def get_html(self,cur_page): url = self.cur_url try: page = request.urlopen(url.format(page = (cur_page - 1) * 25)).read().decode("utf-8") except error.URLError as e: if hasattr(e,'code'): print("HTTPError: the server could not deal with the request") print("Error code: %s"% e.code) elif hasattr(e,'reason'): print("URLError: failed to reach the server") print("Reason: %s"% e.reason) return page ''' page:表示當前抓取到的html檔案 功能:將匹配到的內容寫入到excel檔案中 ''' def find_Info(self,page): movie_items = re.findall(r'<span.*?class="title">(.*?)</span>',page,re.S) number = 0 for index,item in enumerate(movie_items): # print('編號:' + str(index)) # print('編號對應的字串:' + str(item)) if item.find(" ") != 0 and item.find(" ") == -1: douban_excel.write(self.top,0,item) self.top += 1 print('第' + str(self.top) + '個電影名是:' + str(item)) douban_excel.save() def start_spider(self): '''爬蟲入口''' while self.page <= 10: page = self.get_html(self.page) self.find_Info(page) self.page += 1 def main(): '''程式入口''' spider = DouBanSpider() spider.start_spider() if __name__ == '__main__': main()
self.cur_url = 'http://movie.douban.com/top250?start={page}&filter=&type='
注意,標紅的地方用到了字串匹配,第一頁start=0,第二頁start=25···以此類推,每增加一頁,start值增加25。
檔案:excel.py
這個小爬蟲給我的收穫還是很多的,每一個電影都能爬出兩個相同標籤的<span class="title">,區別在於第二個標籤內容的開頭是空格,可能是因為解析html需要用到“utf-8”編碼吧,在遇到非中文的html程式碼時,空格變成了 所以真正的電影名的標籤裡需要滿足以下兩點條件:1.沒有 2.不能是空格開頭。說這麼多了,大家自己看一看html就知道個所以然了!import xlrd import xlwt import os class Excel: def __init__(self,excel_name,sheet_name): global bookWrite global bookRead global sheet self.excel_name = excel_name self.sheet_name = sheet_name bookWrite = xlwt.Workbook(encoding = 'utf-8') sheet = bookWrite.add_sheet(sheet_name,cell_overwrite_ok = True) #寫資料到excel def write(self,row,col,data): sheet.write(row,col,data) #儲存資料到檔案 def save(self): if os.path.exists(self.excel_name): os.remove(self.excel_name) bookWrite.save(self.excel_name) else: bookWrite.save(self.excel_name) #讀取excel資料;單元格 def read(self,sheet_index,row,col): bookRead = xlrd.open_workbook(self.excel_name) sheet = bookRead.sheet_by_index(sheet_index) return sheet.cell(row,col).value #根據行與列獲取單元格值 #讀取excel資料:單行資料 def read_by_row(self,sheet_index,row): bookRead = xlrd.open_workbook(self.excel_name) sheet = bookRead.sheet_by_index(sheet_index) # 根據索引獲取工作表 return sheet.row_values(row) #讀取excel資料:單列資料 def read_by_col(self,sheet_index,col): bookRead = xlrd.open_workbook(self.excel_name) sheet = bookRead.sheet_by_index(sheet_index) return sheet.col_values(col)