上週動手開始學習python寫網路爬蟲,然而對網路的相關知識了解太少,遂跑去看了《計算機網路(自頂向下方法)》這本書,目前學習到網路層。
但自己覺得對與爬蟲的學習幫助不是太大,所以覺得還是看**逐步學習吧。
github
下面是我對**的注釋理解
#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""乙個簡單的python爬蟲, 用於抓取豆瓣電影top前100的電影的名稱
anthor: andrew liu
version: 0.0.1
date: 2014-12-04
language: python2.7.8
editor: sublime text2
operate: 具體操作請看readme.md介紹
"""import string
import re #正規表示式模組
import urllib2 #http 客戶端模組
class
doubanspider
(object) :
"""類的簡要說明
本類主要用於抓取豆瓣前100的電影名稱
attributes:
page: 用於表示當前所處的抓取頁面
cur_url: 用於表示當前爭取抓取頁面的url
datas: 儲存處理好的抓取到的電影名稱
_top_num: 用於記錄當前的top號碼
"""def__init__
(self) :
self.page = 1
self.cur_url = ""
self.datas =
self._top_num = 1
print
"豆瓣電影爬蟲準備就緒, 準備爬取資料..."
defget_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")
'''抓取頁面。在原網頁**中可看到頁面編碼方式為utf-8,此處以改格式解碼
每頁顯示25項
format()函式用於格式化輸出字串
'''except urllib2.urlerror, e : #e中儲存錯誤資訊
if hasattr(e, "code"): #檢查e中是否有第二個引數中的屬性
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 #返回html
deffind_title
(self, my_page) :
""" 通過返回的整個網頁html, 正則匹配前100的電影名稱
args:
my_page: 傳入頁面的html文字用於正則匹配
"""temp_data =
movie_items = re.findall(r'(.*?)', my_page, re.s) #正規表示式查詢,第三個引數尚不清楚用法
for index, item in enumerate(movie_items) :
if item.find(" ") == -1 : # 為html中空格表示法
self._top_num += 1
self.datas.extend(temp_data)
defstart_spider
(self) :
""" 爬蟲入口, 並控制爬蟲抓取頁面的範圍
"""while self.page <= 4 :
my_page = self.get_page(self.page)
self.find_title(my_page)
self.page += 1
defmain
() :
print
""" ###############################
乙個簡單的豆瓣電影前100爬蟲
author: andrew_liu
version: 0.0.1
date: 2014-12-04
###############################
"""my_spider = doubanspider()
my_spider.start_spider()
for item in my_spider.datas :
print item
print
"豆瓣爬蟲爬取結束..."
if __name__ == '__main__':
main()
為了測試format()函式的作用,我新增了一行**在try後面:
url.format(page =(cur_page - 1) * 25)
測試結果:
可以看出來format函式把page替換了
更多format函式的用法參考python - 格式化(format())輸出字串 詳解 及 **
python爬蟲 豆瓣電影TOP100
背景 借我 謝春花 今天學習學得頭大,放鬆之餘,水一篇文章好了 用python爬蟲豆瓣電影top100的簡易資訊 要收集的資訊包括 每部電影的標題 導演 上映年份 評分以及引用。環境 python 2.7 系統 macos 10.13.1 模組 beautifulsoup requests pand...
設計乙個簡單的電影類ios
能夠表述出海報內容 類名 film 影片名字 內容上映時間 展示 main.m import import film.h int main int argc,const char argv return 0 film.h import enum selectwatchfilmtime typedef...
乙個簡單的爬取乙個電影網的磁力鏈結
import requests from lxml import etree from urllib import parse import re 定義乙個函式 defygdy baseurl headers response requests.get baseurl,headers headers...