1. 程式人生 > 其它 >一個Scrapy爬蟲例項

一個Scrapy爬蟲例項

目錄

Scrapy是啥

scrapy是一個使用python編寫的開源網路爬蟲框架。這裡的框架實際上就是應用程式的骨架,是一個半成品,框架能夠保證程式結構風格統一。

Scrapy的安裝

pip install Scrapy。但在此之前要先安裝幾個包:
在cmd中執行以下語句:
(1) pip install wheel
(2) pip install lxml
(3) pip install twisted

(4) 最後 pip install scrapy
(5) 驗證Scrapy框架是否安裝成功:
開啟python,試試import scrapy 和scrapy.version_info
驗證安裝
如圖看到Scrapy庫的版本為2.4.1

例項:爬取美劇天堂new100:

(1)建立工程:

找一個資料夾,開啟cmd進入該目錄。
輸入命令:
Scrapy startproject movie
在這裡插入圖片描述
這時可以看到該目錄下多了一個叫movie的資料夾,而這個資料夾裡面還有一個叫movie的資料夾,裡面是這樣的:
在這裡插入圖片描述
這樣Scrapy專案就成功建立了。

(2) 建立爬蟲程式

用cd先進入movie目錄,輸入命令:
Scrapy genspider meiju meijutt.tv

在這裡插入圖片描述
該命令建立了一個叫meiju的爬蟲
這時檢視spiders目錄可以看到多了一個meiju.py,就是我們剛建立的爬蟲。

(3) 編輯爬蟲

用編輯器開啟meiju.py
這是我們的目標
這個網站的內容是我們的爬取目標

import scrapy
from movie.items import MovieItem

class MeijuSpider(scrapy.Spider):  # 繼承這個類
    name = 'meiju'  #名字
    allowed_domains = ['meijutt.tv']  # 域名
    start_urls = ['https://www.meijutt.tv/new100.html'
] # 要補充完整 def parse(self, response): movies = response.xpath('//ul[@class="top-list fn-clear"]/li') # 看不懂 for each_movie in movies: item = MovieItem() item['name'] = each_movie.xpath('./h5/a/@title').extract()[0] yield item # 一種特殊的迴圈

(4)設定item模板:

在items中輸入:

import scrapy


class MovieItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
name = scrapy.Field()

(5) 設定配置檔案

在settings.py中增加程式碼:

ITEM_PIPELINES = {'movie.pipelines.MoviePipeline':100}

(6)設定資料處理指令碼:

在pipelines.py中輸入程式碼:

import json

class MoviePipeline(object):
    def process_item(self, item, spider):
        return item

(7)執行爬蟲

在爬蟲根目錄執行命令:
Scrapy crawl meiju

Emm發現meiju.py有錯誤,看了一下是由於冒號後面的語句沒有縮排。

現在看看那兩個xpath選擇器的內容:

movies = response.xpath('//ul[@class="top-list  fn-clear"]/li')
        # 意思是選中所有的屬性class值為"top-list  fn-clear"的ul下的li標籤內容

在這裡插入圖片描述

也就是說movies得到的是li標籤之間的內容的列表

for each_movie in movies:
            item = MovieItem()
            item['name'] = each_movie.xpath('./h5/a/@title').extract()[0]
            # .表示選取當前節點,也就是對每一項li,其下的h5下的a標籤中title的屬性值
            yield item  # 一種特殊的迴圈

修改增加縮排,並修改第一個xpath的內容後再次執行:
在這裡插入圖片描述

可以看到爬取成功