scrapy-安裝環境
scrapy-安裝環境
-
站點
-
安裝
pip install Scrapy
安裝後,只要在命令終端輸入 scrapy可以檢驗是否安裝成功。
windows安裝錯誤:
[Scrapy安裝錯誤:](MicrosoftVisualC++14.0isrequired…
https://blog.csdn.net/nima1994/article/details/74931621)
1.命令
-
建立專案
scrapy startproject myproject
專案目錄結構:
下面來簡單介紹一下各個主要檔案的作用:-
scrapy.cfg :專案的配置檔案
-
mySpider/ :專案的Python模組,將會從這裡引用程式碼
-
mySpider/items.py :專案的目標檔案
-
mySpider/pipelines.py :專案的管道檔案
-
mySpider/settings.py :專案的設定檔案
-
mySpider/spiders/ :儲存爬蟲程式碼目錄
-
-
建立一個新的spider
scrapy genspider mydomain mydomain.com
要建立一個Spider, 你必須用scrapy.Spider類建立一個子類,並確定了三個強制的屬性 和 一個方法。
-
name = “” :這個爬蟲的識別名稱,必須是唯一的,在不同的爬蟲必須定義不同的名字。
-
allow_domains = [] 是搜尋的域名範圍,也就是爬蟲的約束區域,規定爬蟲只爬取這個域名下的網頁,不存在的URL會被忽略。
-
start_urls = () :爬取的URL元祖/列表。爬蟲從這裡開始抓取資料,所以,第一次下載的資料將會從這些urls開始。其他子URL將會從這些起始URL中繼承性生成。
-
parse(self, response) :解析的方法,每個初始URL完成下載後將被呼叫,呼叫的時候傳入從每一個URL傳回的Response物件來作為唯一引數,主要作用如下:
負責解析返回的網頁資料(response.body),提取結構化資料(生成item)
生成需要下一頁的URL請求。
-
-
檢視所有爬蟲
scrapy list
執行爬蟲
scrapy crawl <spider>
執行爬蟲,並把結果儲存到指定檔案
scrapy crawl runoob -o taobo.json
利用命令列,抓取指定URL的程式碼
scrapy fetch https://s.taobao.com/list?q=iphone
備註的部分
-
DEMO
-
構建item模型
開啟mySpider目錄下的items.pyItem 定義結構化資料欄位,用來儲存爬取到的資料,有點像Python中的dict,但是提供了一些額外的保護減少錯誤。
可以通過建立一個 scrapy.Item 類, 並且定義型別為 scrapy.Field的類屬性來定義一個Item(可以理解成類似於ORM的對映關係)。
接下來,建立一個ItcastItem 類,和構建item模型(model)。
import scrapy from scrapy.item import Item, Field class MyteachspiderItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() pass class Website(Item): title = Field() link = Field() desc = Field()
-
新建爬蟲
scrapy genspider runoob runoob.com
-
定義爬蟲
# -*- coding: utf-8 -*- import scrapy from myTeachSpider.items import Website class RunoobSpider(scrapy.Spider): name = "runoob" allowed_domains = ["runoob.com"] start_urls = [ "http://www.runoob.com/html/html-tutorial.html", "http://www.runoob.com/css/css-tutorial.html", ] def parse(self, response): items=[] for sel in response.xpath('//ul/li'): item = Website() # extract()方法返回的都是unicode字串 # xpath返回的是包含一個元素的列表 item['title'] = sel.xpath('a/text()').extract() item['link'] = sel.xpath('a/@href').extract() item['desc'] = sel.xpath('text()').extract() items.append(item) # 將獲取的資料交給pipelines # yield item # 返回資料,不經過pipeline return items
-
執行爬蟲並儲存到指定檔案
scrapy crawl runoob -o runoob.json
from scrapy.cmdline import execute execute(['scrapy', 'crawl', 'runoobSpider']) #execute('scrapy crawl runoobSpider -o items.csv -t csv'.split())
-