Scrapy豆瓣爬蟲

scrapy安裝以及簡單使用

  • 1.進入終端,輸入命令pip install scrapy 安裝模塊。安裝成功后,新建一個項目,輸入命令scrapy startproject douban ,這樣就能看到一個douban文件夾,目錄結構如下:

    介紹下各個文件的作用
    scrapy.cfg:項目的配置文件
    douban/items.py:項目的items文件
    douban/pipelines.py:項目的pipelines文件
    douban/settings.py:項目的設置文件
    douban/spiders/:存儲爬蟲的目錄

明確在Item中需要爬取的數據

  • 1.抓取豆瓣電影的片名(movie_name)、導演(movie_director)、編劇(movie_writer)、演員(movie_actor)、上映日期(movie_date)、片長(movie_long)、電影描述(movie_description)。在scrapy中,Item是用來加載抓取內容的容器,類似于python中的字典。比如movie_name就像字典中的鍵,爬取到的數據就是字典中的值。


制作爬蟲

  • 2.1 制作爬蟲分成兩步:先爬后取,首先獲取網頁的所有內容,然后取出對我們有用的部分。下面寫一只爬蟲,命名為DoubanSpider.py保存在douban\spiders目錄下,代碼如下:


    name是唯一的命名,運行scrapy crawl douban 這里的douban就是這個name,allow_domains 是搜索的域名范圍,這里的start_urls 為空,在后面的函數會進行填充。

  • 2.2 很多情況下我們是直接在start_urls 中存入的頁面url,但是這里我們爬取的鏈接有很多而且是有規律的。那么解釋下start_requests 這個方法是干什么的:

   def start_requests(self):
          for url in self.start_urls:
                yield self.make_requests_from_url(url)  #可見是從start_urls中讀取鏈接,使用make_requests_from_url生產Request
 可見`start_requests` 是系統默認調用的,我們可以重寫這個函數,根據需求定制自己的start_urls。豆瓣電影的url是`http://movie.douban.com/subject_search?search_text=` +`電影名`。這里定制了請求頭,不加請求頭發現訪問404錯誤
 ![](http://upload-images.jianshu.io/upload_images/4300291-53a53b5cbd377c38?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  • 2.3 parse函數,上面執行了請求,回調函數即為parser。scrapy幫助我們處理Request請求,會獲得請求的url網站的響應response,我們重寫parser函數:


    在這個函數中我們獲得電影的url鏈接,使用的是xpath方法,同樣也可以使用css方法,語法可以查詢http://www.w3school.com這個網站。獲得url后繼續發送Request請求,回調函數是自定義的parse_movie函數。

  • 2.4 在回調函數parse_movie中我們真正抓取我們要的數據,這里進入的就是電影的具體界面,使用的仍然是xpath方法。作為一只爬蟲,Spider希望將其抓取的數據存放到Item zhong ,這里定義了前面的DoubanItem對象,把爬取到的內容存入到該對象中。


    運行命令scrapy crawl douban 就能在終端看到打印出的數據

存儲內容

  • 1.保存信息有4種方式:json,json lines,csv,xml。假如這里用json導出,命令如下:

     scrapy crawl douban -o items.json -t json
    
-o后面是導出文件名,-t后面是導出類型
- 2.當Item在Spider中被收集之后,將會被傳遞到Item Pipeline,一些組件會按照一定的順序執行對Item處理。我們要編寫自己的item pipeline,每個item pipeline都是個獨立的python類,必須實現process_item(self, item, spider)方法。
* item(Item對象) - 被爬取的item
* spider(Spider對象) -爬取該item的spider
![](http://upload-images.jianshu.io/upload_images/4300291-db26008b29c8f8af?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    將所有的item存儲到items.json文件中,每行包含一個序列化為json格式的item,且參數ensure_ascii=False解決了json格式的中文編碼問題。
- 3.啟動一個Item Pipeline 組件,你必須將它的類添加到 ITEM_PIPELINES 配置,修改settings.py配置文件,加入如下,:
![](http://upload-images.jianshu.io/upload_images/4300291-93b9d42ad74b9558?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

 按照工程名.pipelines.自定義pipeline組建類名格式編寫,后面的數字通常定義在0-1000之間。

- 4.至此整個豆瓣爬蟲制作完成,在終端進入目錄運行`scrapy crawl douban` ,items.json文件中就保持了我們抓取到的item。內容如下,想要多抓的話在電影文本里多加幾個電影名:
![](http://upload-images.jianshu.io/upload_images/4300291-0caf851595f523b7?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容