Scrapy框架的学习(2.scrapy入门,简单爬取页面,并使用管道(pipelines)保存数据)
上個博客寫了:? Scrapy的概念以及Scrapy的詳細工作流程?https://blog.csdn.net/wei18791957243/article/details/86154068
1.scrapy的安裝? pip install scrapy
?2.創建Scarpy項目:
? ?在cmd中進入到想要創建Scrapy項目的路徑下(最好在已經創建好的pycharm的工程路徑下,就不用導入Python編譯器等):? ? 輸入命令創建:scrapy startproject scrapy的項目名稱
??
?創建之后,可以在pycharm中查看已經創建了什么,一個
??
?items.py? 可以預先定義好爬取那些字段
?middlewares.py? : 中間鍵
?pipelines.py:? 管道? , 進行數據的處理以及保存
?settings.py? :? 整個項目的設置
spiders文件夾;? 創建好的爬蟲,創建好是空的
3.生成一個爬蟲? ?
? ?首先cd 創建的scrapy的項目名
? ?然后??scrapy? genspider? ?爬蟲名? ?域名(即爬取的范圍)
??
然后進入到pycharm中查看生成的東西:
?? ? ? ? ?
4.然后就可以寫爬蟲了,? 這是一個專門測試scrapy的爬蟲網站 :http://quotes.toscrape.com/? 里面是一些名言名句
? ?在剛才創建好的爬蟲名字的py文件里面寫。
# -*- coding: utf-8 -*- import scrapyclass ScrapetestSpider(scrapy.Spider):name = 'scrapeTest' # 爬蟲名'''允許爬取的范圍'''allowed_domains = ['quotes.toscrape.com']'''最開始請求的url地址'''start_urls = ['http://quotes.toscrape.com/']def parse(self, response):"""處理start_url地址對應的響應"""# 爬取頁面上的名言ret1 = response.xpath("//span[@class='text']//text()")print(ret1)? 然后打印出這個名言,?
? ?
5.? 啟動爬蟲的框架:
首先cmd中進入到你剛才創建的項目路徑下。
?輸入命令:?scrapy crawl 爬蟲名
(1)會打印出很多的東西,包括日志等等,
(2)看著有點亂,我們可以在settings.py加入下面設置
LOG_LEVEL = "WARNING"然后在執行命令就可以了? :?scrapy crawl 爬蟲名
?可以看到爬取的數據都在一個列表當中,列表當中的每個元素是一個Selector對象,
(3). 直接取出當中的數據? extract()方法,可以在代碼中這樣寫
ret1 = response.xpath("//span[@class='text']//text()").extract()然后在執行啟動框架,運行命令,可以看到數據就取出來了?
? 有關取值:
?
?當使用extrat_first()的時候,如果xpath寫錯的話,取值的會是一個空值,None
6. pipelines管道的使用,? ?
? 首先要在pipelines里面開啟? ,在settings.py里面把這個注釋去掉就行
? ?
是一個字典, 鍵代表位置,值代表距離引擎的遠近,即權重
?對值的解釋:? 我們可以定義多個pipeline,數據會先進行一個pipeline再進行一個pipeline,進入的pipeline的先后順序就可以通過值來指定。值越小會先執行
? 爬蟲名字.py:
# -*- coding: utf-8 -*- import scrapyclass ScrapetestSpider(scrapy.Spider):name = 'scrapeTest' # 爬蟲名'''允許爬取的范圍'''allowed_domains = ['quotes.toscrape.com']'''最開始請求的url地址'''start_urls = ['http://quotes.toscrape.com/']def parse(self, response):"""處理start_url地址對應的響應"""# 爬取頁面上的名言text = response.xpath("//span[@class='text']//text()").extract()# 爬取頁面上的作者aut = response.xpath("//small[@class='author']//text()").extract()for li in range(len(text)):item = {}item["author"] = aut[li]item["text"] = text[li]yield item?
pipelines.py: # -*- coding: utf-8 -*-# Define your item pipelines here # # Don't forget to add your pipeline to the ITEM_PIPELINES setting # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.htmlimport json class MyspiderPipeline(object):def process_item(self, item, spider):with open("text.txt",'a') as f:f.write(json.dumps(item,ensure_ascii=False)+"\n")return itemprint("保存數據成功")然后開啟框架,查看保存的數據text.txt
總結
以上是生活随笔為你收集整理的Scrapy框架的学习(2.scrapy入门,简单爬取页面,并使用管道(pipelines)保存数据)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Scrapy框架的学习(1.scrapy
- 下一篇: Scrapy框架的学习(3.pipeli