Scrapy框架的学习(2.scrapy入门,简单爬取页面,并使用管道(pipelines)保存数据)
上個(gè)博客寫(xiě)了:? Scrapy的概念以及Scrapy的詳細(xì)工作流程?https://blog.csdn.net/wei18791957243/article/details/86154068
1.scrapy的安裝? pip install scrapy
?2.創(chuàng)建Scarpy項(xiàng)目:
? ?在cmd中進(jìn)入到想要?jiǎng)?chuàng)建Scrapy項(xiàng)目的路徑下(最好在已經(jīng)創(chuàng)建好的pycharm的工程路徑下,就不用導(dǎo)入Python編譯器等):? ? 輸入命令創(chuàng)建:scrapy startproject scrapy的項(xiàng)目名稱(chēng)
??
?創(chuàng)建之后,可以在pycharm中查看已經(jīng)創(chuàng)建了什么,一個(gè)
??
?items.py? 可以預(yù)先定義好爬取那些字段
?middlewares.py? : 中間鍵
?pipelines.py:? 管道? , 進(jìn)行數(shù)據(jù)的處理以及保存
?settings.py? :? 整個(gè)項(xiàng)目的設(shè)置
spiders文件夾;? 創(chuàng)建好的爬蟲(chóng),創(chuàng)建好是空的
3.生成一個(gè)爬蟲(chóng)? ?
? ?首先cd 創(chuàng)建的scrapy的項(xiàng)目名
? ?然后??scrapy? genspider? ?爬蟲(chóng)名? ?域名(即爬取的范圍)
??
然后進(jìn)入到pycharm中查看生成的東西:
?? ? ? ? ?
4.然后就可以寫(xiě)爬蟲(chóng)了,? 這是一個(gè)專(zhuān)門(mén)測(cè)試scrapy的爬蟲(chóng)網(wǎng)站 :http://quotes.toscrape.com/? 里面是一些名言名句
? ?在剛才創(chuàng)建好的爬蟲(chóng)名字的py文件里面寫(xiě)。
# -*- coding: utf-8 -*- import scrapyclass ScrapetestSpider(scrapy.Spider):name = 'scrapeTest' # 爬蟲(chóng)名'''允許爬取的范圍'''allowed_domains = ['quotes.toscrape.com']'''最開(kāi)始請(qǐng)求的url地址'''start_urls = ['http://quotes.toscrape.com/']def parse(self, response):"""處理start_url地址對(duì)應(yīng)的響應(yīng)"""# 爬取頁(yè)面上的名言ret1 = response.xpath("//span[@class='text']//text()")print(ret1)? 然后打印出這個(gè)名言,?
? ?
5.? 啟動(dòng)爬蟲(chóng)的框架:
首先cmd中進(jìn)入到你剛才創(chuàng)建的項(xiàng)目路徑下。
?輸入命令:?scrapy crawl 爬蟲(chóng)名
(1)會(huì)打印出很多的東西,包括日志等等,
(2)看著有點(diǎn)亂,我們可以在settings.py加入下面設(shè)置
LOG_LEVEL = "WARNING"然后在執(zhí)行命令就可以了? :?scrapy crawl 爬蟲(chóng)名
?可以看到爬取的數(shù)據(jù)都在一個(gè)列表當(dāng)中,列表當(dāng)中的每個(gè)元素是一個(gè)Selector對(duì)象,
(3). 直接取出當(dāng)中的數(shù)據(jù)? extract()方法,可以在代碼中這樣寫(xiě)
ret1 = response.xpath("//span[@class='text']//text()").extract()然后在執(zhí)行啟動(dòng)框架,運(yùn)行命令,可以看到數(shù)據(jù)就取出來(lái)了?
? 有關(guān)取值:
?
?當(dāng)使用extrat_first()的時(shí)候,如果xpath寫(xiě)錯(cuò)的話,取值的會(huì)是一個(gè)空值,None
6. pipelines管道的使用,? ?
? 首先要在pipelines里面開(kāi)啟? ,在settings.py里面把這個(gè)注釋去掉就行
? ?
是一個(gè)字典, 鍵代表位置,值代表距離引擎的遠(yuǎn)近,即權(quán)重
?對(duì)值的解釋:? 我們可以定義多個(gè)pipeline,數(shù)據(jù)會(huì)先進(jìn)行一個(gè)pipeline再進(jìn)行一個(gè)pipeline,進(jìn)入的pipeline的先后順序就可以通過(guò)值來(lái)指定。值越小會(huì)先執(zhí)行
? 爬蟲(chóng)名字.py:
# -*- coding: utf-8 -*- import scrapyclass ScrapetestSpider(scrapy.Spider):name = 'scrapeTest' # 爬蟲(chóng)名'''允許爬取的范圍'''allowed_domains = ['quotes.toscrape.com']'''最開(kāi)始請(qǐng)求的url地址'''start_urls = ['http://quotes.toscrape.com/']def parse(self, response):"""處理start_url地址對(duì)應(yīng)的響應(yīng)"""# 爬取頁(yè)面上的名言text = response.xpath("//span[@class='text']//text()").extract()# 爬取頁(yè)面上的作者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("保存數(shù)據(jù)成功")然后開(kāi)啟框架,查看保存的數(shù)據(jù)text.txt
總結(jié)
以上是生活随笔為你收集整理的Scrapy框架的学习(2.scrapy入门,简单爬取页面,并使用管道(pipelines)保存数据)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Scrapy框架的学习(1.scrapy
- 下一篇: Scrapy框架的学习(3.pipeli