Scrapy學(xué)習(xí)
《精通Scrapy網(wǎng)絡(luò)爬蟲》第八章--僅作為本人學(xué)習(xí)筆記鸳吸,如有侵權(quán)林束,請(qǐng)私信我刪除
1惹恃、項(xiàng)目需求
爬取http://books.toscrape.com/中的書籍信息庇茫,包括
書名
價(jià)格
評(píng)價(jià)等級(jí)
產(chǎn)品編碼
庫(kù)存量
評(píng)價(jià)數(shù)量
將爬取的結(jié)果保存到CSV文件中
2、頁(yè)面分析
除了使用F12之外搀菩,可以使用scrapy shell<URI>命令
使用之前要安裝好pip install pypiwin32
在此環(huán)境下常用的變量
*request
最近一次下載對(duì)應(yīng)的Request對(duì)象
*response
最近一次下載對(duì)應(yīng)的Response對(duì)象
*fetch(req_or_url)
該函數(shù)用于下載頁(yè)面呕臂,可傳入一個(gè)Request對(duì)象或url字符串,調(diào)用后會(huì)更新變量request和response
*view(response)
該函數(shù)用于在瀏覽器中顯示response中的頁(yè)面
>>>view(response)
跟在瀏覽器打開的頁(yè)面一樣秕磷,但是這個(gè)是由Scrapy爬蟲下載的頁(yè)面诵闭,使用view函數(shù)更加可靠
(我的理解就是:可以一步步看自己提取信息的命令是否正確,不必像普通爬蟲那樣寫好爬蟲代碼準(zhǔn)備爬取大量信息的時(shí)候報(bào)錯(cuò)才知道自己的提取命令寫得不對(duì))
>>>sel = response.css('div.product_main')
>>>sel.xpath('./h1/text()').extract_first()
'A Light in the Attic'
>>>sel.css('p.price_color::text').extract_first()
'£51.77'
>>>sel.css('p.star-rating::attr(class)').re_first('star-rating([A-Za-z]+)')
'Three'
把自己要提取的信息都嘗試一遍
分析完書籍頁(yè)面后接著分析如何再書籍列表頁(yè)面中提取每一個(gè)書籍頁(yè)面的鏈接
(使用fetch函數(shù)要先關(guān)閉terminal重啟scrapy shell)
用fetch函數(shù)下載第一個(gè)書籍列表頁(yè)面澎嚣,下載完后再調(diào)用view函數(shù)在瀏覽器中查看頁(yè)面
>>>fetch('http://books.toscrape.com/')
>>>view(response)
鏈接可在每個(gè)<article class="product_pod">中找到
使用LinkExtractor提取鏈接
完成分析工作
3、編碼實(shí)現(xiàn)
創(chuàng)建一個(gè)Scrapy項(xiàng)目瘟芝,取名為toscrape_book
scrapy startproject toscrape_book
通常我們不需要手工創(chuàng)建Spider文件以及Spider類
cd?toscrape_book
scrapy genspider books books.toscrape.com
兩個(gè)參數(shù)分別為Spider的名字和所要爬取的域(網(wǎng)站)
自動(dòng)生成的兩個(gè)東西都在
定義封裝書籍信息的類
實(shí)現(xiàn)Spider之前先定義封裝書籍信息的Item類
分5步完成BookSpider
*繼承Spider創(chuàng)建BookSpider類? *為Spider取名? *指定起始爬取點(diǎn) (都已完成)? ? ? ? ??
*實(shí)現(xiàn)書籍列表頁(yè)面的解析函數(shù)?? ? ?
*實(shí)現(xiàn)書籍頁(yè)面的解析函數(shù)??
指定各列次序
完成倒是完成了易桃,但是數(shù)據(jù)并沒(méi)有1000條
回去再找問(wèn)題吧,吃了一下午的二手煙了
自己依舊笨
終于找到了锌俱,因?yàn)槭歉粢恍械奈钪#跃湍敲炊嗔耍痪湍敲袋c(diǎn)代碼贸宏,還能是哪錯(cuò)呢造寝。[攤手.emoji]