Scrapy 安裝與使用
當前環境win10,python_3.6.4,64bit。在命令提示符窗口運行pip install Scrapy,出現以下結果:
building ‘twisted.test.raiser‘ extension error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools
按報錯提示安裝之後錯誤依舊存在;
http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted> 下載Twisted
pip install C:\Users\E5-573G\Desktop\2018寒假\Python\爬蟲\scrapy\Twisted-17.5.0-cp36-cp36m-win_amd64.whl1
其中install後面為下載的whl文件的完整路徑名 。
然後再次運行 pip install scrapy 命令即可安裝成功。
Scrapy命令行格式:
Scrapy常用命令:
應用Scrapy爬蟲框架主要是編寫配置型代碼。
Scrapy的第一個實例:演示HTML地址。
演示HTML頁面地址:http://python123.io/ws/demo.html
文件名稱:demo.html
產生步驟:
步驟1:建立一個Scrapy爬蟲工程;
選取一個目錄(C:\Users\E5-573G\Desktop\2018寒假\Python\爬蟲\scrapy),然後執行如下命令:
生成的工程目錄:
python123demo/ ——————— 外層目錄
? scrapy.cfg ——————— 部署Scrapy爬蟲的配置文件
? python123demo/ ——————— Scrapy框架的用戶自定義python代碼
? init.py ——————— 初始化腳本
? items.py ——————— Items代碼模板(繼承類)
? middlewares.py ————— Middlewares代碼模塊(繼承類)
? pipelines.py ————— Pipelines.py代碼模塊(繼承類)
? settings.py ————— Scrapy爬蟲的配置文件
? spiders/ ————— Spiders代碼模塊目錄(繼承類)
目錄結構 pycache/ ————— 緩存目錄,無需修改
? spiders/ ————— Spiders代碼模塊目錄(繼承類)
? init.py ————— 初始化腳本
? pycache/ ————— 緩存目錄,無需修改
內層目錄結構 用戶自定義的spider代碼增加在此處
步驟2:在工程中產生一個Scrapy爬蟲
進入工程目錄(C:\Users\E5-573G\Desktop\2018寒假\Python\爬蟲\scrapy\python123demo)。然後執行如下命令:
該命令行作用:
生成一個名稱為demo的spider
在spiders目錄下增加代碼文件demo.py
#demo.py # -*- coding : utf-8 -*- import scrapy ? class DemoSpider(scrapy.Spider) : name = "demo" allowed_domains = ["python123.io"] start_urls = [‘heep://python123.io/‘] ? def parse (self,response): #parse()用於處理響應,解析內容形成字典,發現新的URL爬取請求 pass
步驟3:配置產生spider爬蟲
? 配置:(1)初始URL地址 (2)獲取頁面後的解析方式
#demo1.py # -*- coding : utf-8 -*- import scrapy ? class DemoSpider(scrapy.Spider) : name = "demo" # allowed_domains = ["python123.io"] #可選 start_urls = [‘heep://python123.io/ws/demo.html‘] ? def parse (self,response): #parse()用於處理響應,解析內容形成字典,發現新的URL爬取請求 fname = response.url.split(‘/‘)[-1] with open (fname,‘wb‘) as f: f.write(response.body) self.log(‘Saved file %s.‘ % fname)
步驟4:運行爬蟲,獲取網頁
在命令行,執行如下命令:
demo爬蟲被執行,捕獲頁面存儲在demo.html
回顧demo.py代碼
#demo.py # -*- coding : utf-8 -*- import scrapy ? class DemoSpider(scrapy.Spider) : name = "demo" start_urls = [‘heep://python123.io/ws/demo.html‘] ? def parse (self,response): #parse()用於處理響應,解析內容形成字典,發現新的URL爬取請求 fname = response.url.split(‘/‘)[-1] with open (fname,‘wb‘) as f: f.write(response.body) self.log(‘Saved file %s.‘ % fname)
demo.py代碼的完整版本
#demo all.py import scrapy ? class DemoSpider(scrapy.Spider) : name = "demo" ? def start_urls(self): urls= [‘heep://python123.io/ws/demo.html‘] for url in urls: yield scrapy.Request(url = url,callback = self.parse) def parse (self,response): #parse()用於處理響應,解析內容形成字典,發現新的URL爬取請求 fname = response.url.split(‘/‘)[-1] with open (fname,‘wb‘) as f: f.write(response.body) self.log(‘Saved file %s.‘ % fname)
yield關鍵字的作用
yield <---------->生成器:包含yield語句的函數是一個生成器;
生成器每次產生一個值(yield語句),函數被凍結,被喚醒後在產生一個值。生成器是一個不斷產生值的函數。
生成器每調用一次在yield位置產生一個值,直到函數執行結束。
生成器相比一次列出所有內容的優勢:
? 更節省存儲空間;
? 響應更迅速;
? 使用更靈活;
Scrapy爬蟲的使用步驟:
? 步驟1:創建一個工程和Spider模板;
? 步驟2:編寫Spider
? 步驟3:編寫Item Pipeline
? 步驟4:優化配置策略
Scrapy爬蟲的數據類型:
? Request類、Response類、Item類
Request類:class scrapy.http.Request()
? Request對象表示一個HTTP請求,由Spider生成,由Downloader執行。
Response類:class scrapy.http.Response()
? Response對象表示一個HTTP響應由Downloader生成,由Spider處理。
Item類: class scrapy.item.Item()
Item對象表示一個從HTML頁面中提取的信息內容;由Spider生成,由Item Pipeline處理,Item類似字典類型,可以按照字典類型操作。
Scrapy爬蟲提取信息的方法:
scrapy爬蟲支持多種HTML信息提取方法:Beautiful Scoop、lxml、re、XPath Selector、CSS Selector
CSS Selector的基本使用:
CSS Selector由W3C組織維護並規範。
”股票數據Scrapy爬蟲”實例介紹
功能描述:
目標:獲取上交所和深交所所有股票的名稱和交易信息
輸出:保存到文件中
? 技術路線:scrapy
數據網站的確定
獲取股票列表:
東方財富網:http://quote.easymoney.com/stocklist.html
獲取個股信息:
百度股票:http://gupiao.baidu.com/stock/
單個股票:http://gupiao.baidu..com/stock/sz002439.html
編寫spider處理鏈接爬取和頁面解析,編寫pipelines處理信息存儲
步驟:
? 步驟1:創建工程和Spider模板;
>scrapy startproject BaiduStocks
>cd BaiduStocks
>scrapy genspider stocks baidu.com
進一步修改spiders/stock.py文件
? 步驟2:編寫Spider
配置stocks.py文件
修改對返回頁面的處理
修改對新增URL爬取請求的處理
? 步驟3:編寫Item Pipeline
Scrapy 安裝與使用