14-爬虫之scrapy框架的基本使用01
生活随笔
收集整理的這篇文章主要介紹了
14-爬虫之scrapy框架的基本使用01
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
scrapy框架
簡介:Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架,非常出名,非常強悍。所謂的框架就是一個已經被集成了各種功能(高性能異步下載,隊列,分布式,解析,持久化等)的具有很強通用性的項目模板。對于框架的學習,重點是要學習其框架的特性、各個功能的用法即可。
- 環境安裝:
- mac、linux:
- pip install scrapy
- windows:
- pip3 install wheel
- 下載twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
- 進入下載目錄,執行 pip3 install Twisted?17.1.0?cp35?cp35m?win_amd64.whl
- Twisted:就是一個異步的架構,被作用在了scrapy中
- 安裝報錯:需要更換另一個版本的twisted文件進行安裝即可
- pip3 install pywin32
- pip3 install scrapy
- 安裝完成后在cmd中輸入scrapy回車,如果沒有報錯就說明安裝成功
- mac、linux:
scrapy的基本使用
創建一個爬蟲工程:scrapy startproject proName
進入工程目錄創建爬蟲源文件:scrapy genspider spiderName www.xxx.com
執行工程:scrapy crawl spiderName
創建一個工程
- scrapy startproject proName
- 目錄結構- scrapy.cfg 項目的主配置信息。(真正爬蟲相關的配置信息在settings.py文件中)
- items.py 設置數據存儲模板,用于結構化數據,如:Django的Model
- pipelines 數據持久化處理
- settings.py 配置文件,如:遞歸的層數、并發數,延遲下載等
- spiders 爬蟲目錄,如:創建文件,編寫爬蟲解析規則
進入工程目錄創建爬蟲源文件
- scrapy genspider spiderName www.xxx.com
對爬蟲源文件編寫相應的代碼
執行工程
- scrapy crawl spiderName
- 執行工程后,默認會輸出工程所有的日志信息
修改工程的配置文件settings.py
- 我們可以指定類型日志的輸出
- 在settings.py中加入 LOG_LEVEL = ‘ERROR’
- 禁止robots
- UA 偽裝
爬蟲文件spiderName內容闡述:
import scrapyclass GpcSpider(scrapy.Spider):# 爬蟲文件的名稱,當前源文件的唯一標識name = 'gpc'# allowed_domains表示允許的域名,用來限定start_urls那些url可以發請求那些不能 # allowed_domains = ['www.xxx.com'] #我們一般給注釋掉# start_urls起始url列表只可以存儲url#作用:列表中存儲的url都會被進行get請求的發送start_urls = ['https://www.baidu.com/','https://www.sogou.com']# 數據解析#parse方法調用的次數取決于start_urls請求的次數#參數response:表示的就是服務器返回的響應對象def parse(self, response):passscrapy數據解析
- 使用:response.xpath(“xpath表達式解析數據”)
- scrapy封裝的xpath和etree中的區別
- scrapy中的xpath直接將定位到的標簽中存儲的值或者屬性值取出,返回的是Selector對象,且相關的數據值是存儲在Selector對象的data中,需要調用extract(),extract_first()取出字符串數據
爬蟲源文件代碼如下
import scrapyclass GpcSpider(scrapy.Spider):# 爬蟲文件的名稱,當前源文件的唯一標識name = 'gpc'# allowed_domains表示允許的域名,用來限定start_urls那些url可以發請求那些不能 # allowed_domains = ['www.xxx.com'] #我們一般給注釋掉# start_urls起始url列表只可以存儲url#作用:列表中存儲的url都會被進行get請求的發送start_urls = ['https://duanziwang.com/category/經典段子/']# 數據解析#parse方法調用的次數取決于start_urls請求的次數#參數response:表示的就是服務器返回的響應對象def parse(self, response):# 數據解析名稱和內容article_list = response.xpath('//*[@id="35087"]')for article in article_list:# scrapy的xpath和etree中xpath使用方式不同# xpath返回的列表中存儲是Selector對象,說明我們想要的字符串數據被存儲在了該對象的data屬性中#extract()就是將data屬性值取出# 調用extract_first() 將列表中第一個列表元素表示的Selector對象中的data值取出#title = article.xpath("//div[@class='post-head']/h1[@class='post-title']/a/text()").extract_first()#content = article.xpath("//div[@class='post-content']/p/text()").extract_first()# 直接調用extract(),可以將列表中的每一個列表元素取出title = article.xpath("//div[@class='post-head']/h1[@class='post-title']/a/text()").extract()content = article.xpath("//div[@class='post-content']/p/text()").extract()# 將Selector對象data屬性值取出print(title,content)持久化存儲
基于終端指令持久化存儲
-
該種方式只可以將parse方法的返回值存儲到本地指定后綴的文本文件中
-
執行指令:scrapy crawl spiderName -o filePath
- 代碼如下:
基于管道的持久化存儲(重點)
1,在爬蟲文件中進行數據解析
2,在items.py中定義相關屬性
3,在爬蟲文件中將解析到的數據存儲封裝到 item類型的對象中
4,將item類型的對象提交給管道
5,在管道文件(pipelines.py)中,接受爬蟲文件提交過來的item類型對象,且對其進行任意形式的持久化存儲
6,在配置文件中開啟管道機制
7,展示一(extract_first())
import scrapy from gemoumou.items import GemoumouItemclass GpcSpider(scrapy.Spider):# 爬蟲文件的名稱,當前源文件的唯一標識name = 'gpc'# allowed_domains表示允許的域名,用來限定start_urls那些url可以發請求那些不能 # allowed_domains = ['www.xxx.com'] #我們一般給注釋掉# start_urls起始url列表只可以存儲url#作用:列表中存儲的url都會被進行get請求的發送start_urls = ['https://duanziwang.com/category/經典段子/']# 數據解析#parse方法調用的次數取決于start_urls請求的次數#參數response:表示的就是服務器返回的響應對象# 基于管道的持久化存儲def parse(self, response):# 數據解析名稱和內容article_list = response.xpath('//*[@id="35087"]')for article in article_list:# 我們可以看見解析出來的內容不是字符串數據,說明和etree中xpath使用方式不同# xpath返回的列表中存儲是Selector對象,說明我們想要的字符串數據被存儲在了該對象的data屬性中# extract()就是將data屬性值取出# 直接調用extract(),可以將列表中的每一個列表元素取出title = article.xpath("//div[@class='post-head']/h1[@class='post-title']/a/text()").extract_first()content = article.xpath("//div[@class='post-content']/p/text()").extract_first()# 實例化一個item類型的對象,將解析到的數據存儲到該對象中item = GemoumouItem()# 不能使用item. 來調用數據item['title'] = titleitem['content'] = content# 將item對象提交給管道yield item8,展示二(extract())
總結
以上是生活随笔為你收集整理的14-爬虫之scrapy框架的基本使用01的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 13-爬虫之js加密,解密,混淆,逆向破
- 下一篇: 16-爬虫之scrapy框架手动请求发送