一個Scrapy爬蟲例項
阿新 • • 發佈:2021-03-23
目錄
Scrapy是啥
scrapy是一個使用python編寫的開源網路爬蟲框架。這裡的框架實際上就是應用程式的骨架,是一個半成品,框架能夠保證程式結構風格統一。
Scrapy的安裝
pip install Scrapy。但在此之前要先安裝幾個包:
在cmd中執行以下語句:
(1) pip install wheel
(2) pip install lxml
(3) pip install twisted
(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的內容後再次執行:
可以看到爬取成功