Python爬蟲,用於抓取豆瓣電影Top前100的電影的名稱
阿新 • • 發佈:2019-02-07
初步接觸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(" ") == -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()
執行結果: