1. 程式人生 > >Python爬蟲,用於抓取豆瓣電影Top前100的電影的名稱

Python爬蟲,用於抓取豆瓣電影Top前100的電影的名稱

初步接觸python爬蟲(其實python也是才起步),發現一段程式碼研究了一下,覺得還比較有用處,Mark下。
上程式碼:

#!/usr/bin/python
#coding=utf-8
#Author: Andrew_liu
#mender:cy
"""
一個簡單的Python爬蟲, 用於抓取豆瓣電影Top前100的電影的名稱
Anthor: Andrew_liu
mender:cy
Version: 0.0.2
Date: 2017-03-02
Language: Python2.7.12
Editor: JetBrains PyCharm 4.5.4
"""
import string
import
re import urllib2 import time class DouBanSpider(object) : """類的簡要說明 主要用於抓取豆瓣Top100的電影名稱 Attributes: page: 用於表示當前所處的抓取頁面 cur_url: 用於表示當前爭取抓取頁面的url datas: 儲存處理好的抓取到的電影名稱 _top_num: 用於記錄當前的top號碼 """ def __init__(self): self.page = 1 self.cur_url = "http://movie.douban.com/top250?start={page}&filter=&type="
self.datas = [] self._top_num = 1 print u"豆瓣電影爬蟲準備就緒, 準備爬取資料..." def get_page(self, cur_page): """ 根據當前頁碼爬取網頁HTML Args: cur_page: 表示當前所抓取的網站頁碼 Returns: 返回抓取到整個頁面的HTML(unicode編碼) Raises: URLError:url引發的異常 """
url = self.cur_url try: my_page = urllib2.urlopen(url.format(page=(cur_page - 1) * 25)).read().decode("utf-8") except urllib2.URLError, e: if hasattr(e, "code"): print "The server couldn't fulfill the request." print "Error code: %s" % e.code elif hasattr(e, "reason"): print "We failed to reach a server. Please check your url and read the Reason" print "Reason: %s" % e.reason return my_page def find_title(self, my_page): """ 通過返回的整個網頁HTML, 正則匹配前100的電影名稱 Args: my_page: 傳入頁面的HTML文字用於正則匹配 """ temp_data = [] movie_items = re.findall(r'<span.*?class="title">(.*?)</span>', my_page, re.S) for index, item in enumerate(movie_items): if item.find("&nbsp") == -1: temp_data.append("Top" + str(self._top_num) + " " + item) self._top_num += 1 self.datas.extend(temp_data) def start_spider(self): """ 爬蟲入口, 並控制爬蟲抓取頁面的範圍 """ while self.page <= 4: my_page = self.get_page(self.page) self.find_title(my_page) self.page += 1 def main(): print u""" ############################### 一個簡單的豆瓣電影前100爬蟲 Author: Andrew_liu mender: cy Version: 0.0.2 Date: 2017-03-02 ############################### """ my_spider = DouBanSpider() my_spider.start_spider() fobj = open('/data/moxiaokai/HelloWorld/cyTest/blogcode/top_move.txt', 'w+') for item in my_spider.datas: print item fobj.write(item.encode("utf-8")+'\n') time.sleep(0.1) print u"豆瓣爬蟲爬取完成" if __name__ == '__main__': main()

執行結果:
執行結果
執行結果