天天看點

scrapy爬蟲架構入門執行個體(爬取貓眼電影top100)安裝scrapyscrapy元件和流程一個簡單的項目執行個體(爬貓眼電影排行)

scrapy爬蟲架構入門執行個體(爬取貓眼電影top100)

  • 安裝scrapy
  • scrapy元件和流程
  • 一個簡單的項目執行個體(爬貓眼電影排行)
    • 項目結構
    • 分析要爬取的網頁和内容
    • 建立一個spider
    • 定義需要的item
    • 然後修改spider的方法來擷取資訊
    • 運作并儲存

安裝scrapy

因為用的是anaconda,是以直接pip install scrapy就成功了。如果不成功可以pip install lxml先,可以檢視下版本

scrapy --version
Scrapy 1.7.1 - project: tutorial
           

scrapy元件和流程

scrapy爬蟲架構入門執行個體(爬取貓眼電影top100)安裝scrapyscrapy元件和流程一個簡單的項目執行個體(爬貓眼電影排行)
scrapy爬蟲架構入門執行個體(爬取貓眼電影top100)安裝scrapyscrapy元件和流程一個簡單的項目執行個體(爬貓眼電影排行)

一個簡單的項目執行個體(爬貓眼電影排行)

用終端建立,cd到你放scrapy項目的檔案夾,然後開始項目maoyan是你的項目名,自己取名

scrapy startproject maoyan
           

項目結構

scrapy爬蟲架構入門執行個體(爬取貓眼電影top100)安裝scrapyscrapy元件和流程一個簡單的項目執行個體(爬貓眼電影排行)
檔案 功能
scrapy.cfg 配置檔案
spiders 存放你Spider檔案,也就是你爬取的py檔案
items.py檔案 相當于一個容器,和字典較像
middlewares.py檔案 定義Downloader Middlewares(下載下傳器中間件)和Spider Middlewares(蜘蛛中間件)的實作
pipelines.py檔案 定義Item Pipeline的實作,實作資料的清洗,儲存,驗證。
settings.py檔案 全局配置

分析要爬取的網頁和内容

  • 要爬取的網址是’https://maoyan.com/board/4?offset=0’ 然後往後的十個網頁,寫成清單
  • 然後是要爬取的内容:電影名、評分、主演等
scrapy爬蟲架構入門執行個體(爬取貓眼電影top100)安裝scrapyscrapy元件和流程一個簡單的項目執行個體(爬貓眼電影排行)

建立一個spider

屬性或方法 作用
name 是項目的名字
allowed_domains 是允許爬取的域名,比如一些網站有相關連結,域名就和本網站不同,這些就會忽略。
start_urls 要通路的位址清單,和start_requests方法隻需要定義一個,都是調用parse方法解析
start_requests方法 由此方法通過下面連結爬取頁面
parse方法 是Spider的一個方法,在請求start_url後,之後的方法,這個方法是對網頁的解析,與提取自己想要的東西。
response參數 是請求網頁後傳回的内容,也就是你需要解析的網頁。
import scrapy

class MySpider(scrapy.Spider):
    name = 'maoyan'  # 項目名
    allowed_domains = ['maoyan.com']  # 允許通路的域名

    def start_requests(self):
        url_list = []
        for i in range(0,10):
            url_list.append('https://maoyan.com/board/4?offset='+str(i))
        # 定義爬取的連結
        urls = url_list
        for url in urls:
            # 爬取到的頁面如何處理?送出給parse方法處理
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        pass
           

定義需要的item

  • item是儲存爬取資料的容器,使用的方法和字典差不多。
  • 我們打開items.py檔案,之後我們想要提取的資訊有:

    index(排名)、title(電影名)、star(主演)、releasetime(上映時間)、score(評分)

class MaoyanItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    index = scrapy.Field()
    title = scrapy.Field()
    star = scrapy.Field()
    releasetime = scrapy.Field()
    score = scrapy.Field()

           

然後修改spider的方法來擷取資訊

from maoyan.items import MaoyanItem
...
    def parse(self, response):
        '''
        start_requests已經爬取到頁面,那如何提取我們想要的内容呢?那就可以在這個方法裡面定義。
        1、定義連結;
        2、通過連結爬取(下載下傳)頁面;
        3、定義規則,然後提取資料;
        '''
        # 這裡用的css選擇查找資訊,也可以用xpath
        dl = response.css('.board-wrapper dd')
        for dd in dl:
            item = MaoyanItem()
            # extract()[0]等同于extract_first()
            item['index'] = dd.css('.board-index::text').extract_first()
            item['title'] = dd.css('.name a::text').extract_first()
            # strip方法是去除空格和換行符
            item['star'] = dd.css('.star::text').extract_first().strip()
            item['releasetime'] = dd.css('.releasetime::text').extract_first()
            item['score'] = dd.css('.integer::text').extract_first()+dd.css('.fraction::text').extract_first()
            yield item
 ...
           

運作并儲存

這樣就寫完了一個簡單的項目,運作即可:

  • 在終端的目前檔案夾下輸入:scrapy crawl maoyan(項目的名字)
  • 這樣隻運作了代碼,并沒有儲存,儲存有多種方式
  • -o maoyan.csv或者-o maoyan.xml或者-o maoyan.json
  • 設定編碼格式 -s FEED_EXPORT_ENCODING=UTF8
  • 選擇csv(表格)格式儲存看看:scrapy crawl maoyan -o maoyan.csv -s FEED_EXPORT_ENCODING=UTF8

找到檔案并打開:

scrapy爬蟲架構入門執行個體(爬取貓眼電影top100)安裝scrapyscrapy元件和流程一個簡單的項目執行個體(爬貓眼電影排行)

繼續閱讀