# 電影天堂爬蟲 **今日目標** 爬取電影天堂前30頁最新電影以及下載地址 ```python # 1. 列印程式執行時間 # 2. 數據爬下來後做處理(字元串),定義成字典 # 3. 一條龍: 獲取 -> 調用解析 -> 數據處理 from urllib import request impor... ...
# 電影天堂爬蟲 **今日目標** 爬取電影天堂前30頁最新電影以及下載地址 ```python # 1. 列印程式執行時間 # 2. 數據爬下來後做處理(字元串),定義成字典 # 3. 一條龍: 獲取 -> 調用解析 -> 數據處理 from urllib import request import time import re import pymysql import random class MaoyanSpider(object): def __init__(self): self.url = 'https://maoyan.com/board/4?offset={}' self.headers={'User-Agent':'Mozilla/5.0'} # 用於記錄頁數 self.page = 1 # 創建資料庫連接對象和游標對象 self.db = pymysql.connect( 'localhost','root','123456','maoyandb',charset='utf8' ) self.cursor = self.db.cursor() # 獲取網頁 def get_page(self,url): req = request.Request( url=url, headers=self.headers ) res = request.urlopen(req) html = res.read().decode('utf-8') # 直接調用解析函數 self.parse_page(html) # 解析網頁 def parse_page(self,html): pattren = re.compile('<div class="movie-item-info">.*?title="(.*?)".*?class="star">(.*?)</p>.*?releasetime">(.*?)</p>',re.S) r_list = pattren.findall(html) print(r_list) self.write_page(r_list) # 存入mysql資料庫(executemany([ [],[],[] ])) def write_page(self,r_list): # 定義空列表 film_list = [] ins = 'insert into filmtab values(%s,%s,%s)' # 處理數據,放到大列表film_list中 for rt in r_list: one_film = [ rt[0],rt[1].strip(),rt[2].strip()[5:15] ] # 添加到大列表中 film_list.append(one_film) # 一次資料庫IO把1頁數據存入 self.cursor.executemany(ins,film_list) # 提交到資料庫執行 self.db.commit() def main(self): for offset in range(0,31,10): url = self.url.format(offset) self.get_page(url) time.sleep(random.randint(1,3)) print('第%d頁爬取完成' % self.page) self.page += 1 # 斷開資料庫(所有頁爬完之後) self.cursor.close() self.db.close() if __name__ == '__main__': start = time.time() spider = MaoyanSpider() spider.main() end = time.time() print('執行時間: %.2f' % (end-start)) ```