1. 程式人生 > >Scrapy入門例項(使用Scrapy抓取豆瓣電影top250榜單)

Scrapy入門例項(使用Scrapy抓取豆瓣電影top250榜單)

專案地址:https://github.com/yuanfuzhi/ScrapyDemo.git

一  Scrapy介紹與安裝

1,  Scrapy介紹

Scrapy是一個為了爬取網站資料,提取結構性資料而編寫的應用框架。可以應用在包括資料探勘,資訊處理或儲存歷史資料等一系列的程式中。其最初是為了

頁面抓取 (更確切來說, 網路抓取 )所設計的,也可以應用在獲取API所返回的資料(例如 Amazon Associates Web Services ) 或者通用的網路爬蟲。

2,  Scrapy安裝

①使用pip安裝

pip install scrapy

網上有很多安裝Scrapy的教程,這裡不多解釋,但不推薦這種安裝方式,因為Scrapy依賴一些包,如果你的電腦上沒有的話,使用pip安裝會出現問題,比較麻煩。推薦使用下面的安裝方式

②使用Anaconda安裝scrapy

Anaconda是一個開源的包、環境管理神器,不多解釋,先從官網下載安裝Anaconda,然後傻瓜式點next安裝,裝好之後開啟命令列,輸入conda install scrapy,然後根據提示按Y,就會將Scrapy及其依賴的包全部下載下來,十分好用。

測試scrapy是否安裝成功:在dos視窗輸入scrapy回車

 

另外附上Anaconda常用指令:https://www.cnblogs.com/yfz1552800131/p/9796503.html

3,  Scrapy專案結構

 

 

scrapy.cfg: 專案配置檔案。

settings.py: 該檔案定義了一些設定,如使用者代理,爬取延時等(詳見: https://doc.scrapy.org/en/latest/topics/settings.html)。

items.py: 該檔案定義了待抓取域的模型(詳見: http://scrapy-chs.readthedocs.io/zh_CN/latest/intro/tutorial.html#item)。

pipelines.py: 該檔案定義了資料的儲存方式(處理要抓取的域),可以是檔案,資料庫或者其他(詳見: http://scrapy-chs.readthedocs.io/zh_CN/latest/topics/item-pipeline.html

)。

middlewares.py: 爬蟲中介軟體,該檔案可定義隨機切換ip或者使用者代理的函式(詳見: http://scrapy-chs.readthedocs.io/zh_CN/latest/topics/spider-middleware.html)。

spiders: 該目錄下儲存實際的爬蟲程式碼(詳見: http://scrapy-chs.readthedocs.io/zh_CN/latest/topics/spiders.html)。

 

二,Scrapy專案實戰

①新建專案:使用pycharm工具在終端中輸入:scrapy startproject douban 新建一個爬蟲專案,然後cd douban 進入專案根目錄

然後在終端輸入命令:scrapy genspider douban_spider movie.douban.com生成douban_spider.py爬蟲檔案

②明確目標

入口URL:https://movie.douban.com/top250

抓取top250電影的序列號,電影名,介紹,星級,評價數,電影描述選項,在items.py檔案中定義抓取的資料項:

③製作爬蟲

在douban_spider.py爬蟲檔案編寫具體的邏輯程式碼:

# -*- coding: utf-8 -*-
import scrapy

from ..items import DoubanItem
class DoubanSpiderSpider(scrapy.Spider):
    name = 'douban_spider'
    # 允許的域名
    allowed_domains = ['movie.douban.com']
    # 入口URL
    start_urls = ['https://movie.douban.com/top250']

    def parse(self, response):
        movie_list = response.xpath("//div[@class='article']//ol[@class='grid_view']/li")
        #迴圈電影的條目
        for i_item in movie_list:
            #匯入item,進行資料解析
            douban_item = DoubanItem()
            douban_item['serial_number'] = i_item.xpath(".//div[@class='item']//em/text()").extract_first()
            douban_item['movie_name'] =  i_item.xpath(".//div[@class='info']//div[@class='hd']/a/span[1]/text()").extract_first()
            #如果檔案有多行進行解析
            content = i_item.xpath(".//div[@class='info']//div[@class='bd']/p[1]/text()").extract()
            for i_content in content:
                content_s ="".join( i_content.split())
                douban_item['introduce'] = content_s
            douban_item['star'] = i_item.xpath(".//span[@class='rating_num']/text()").extract_first()
            douban_item['evaluate'] = i_item.xpath(".//div[@class='star']//span[4]/text()").extract_first()
            douban_item['describe'] = i_item.xpath(".//p[@class='quote']/span/text()").extract_first()
            print(douban_item)
            yield  douban_item
        #解析下一頁,取後一頁的XPATH
        next_link = response.xpath("//span[@class='next']/link/@href").extract()
        if next_link:
            next_link = next_link[0]
            yield  scrapy.Request("https://movie.douban.com/top250"+next_link,callback=self.parse)
View Code

④儲存內容

1,儲存成json或csv格式的檔案

在命令列輸入:scrapy crawl douban_spider -o test.json 或者

scrapy crawl douban_spider -o test.csv,將爬取到的資料存到json檔案或者csv檔案裡

 

 

2,儲存到Mysql資料庫

首先下載pymysql庫:conda install pymysql

然後建好對應的資料庫,資料表:

在專案settings檔案中新增與資料庫連線相關的變數

連線資料庫,獲取cursor以便之後對資料就行增刪查改

資料插入邏輯:

 

執行專案: scrapy crawl douban_spider