??本次將會(huì)使用Scrapy來爬取當(dāng)當(dāng)網(wǎng)的圖書暢銷榜,其網(wǎng)頁截圖如下:
當(dāng)當(dāng)網(wǎng)圖書暢銷榜
??我們的爬蟲將會(huì)把每本書的排名,書名,作者,出版社,價(jià)格以及評(píng)論數(shù)爬取出來,并保存為csv格式的文件。項(xiàng)目的具體創(chuàng)建就不再多講,可以參考上一篇博客,我們只需要修改items.py文件,以及新建一個(gè)爬蟲文件BookSpider.py.
??items.py文件的代碼如下,用來儲(chǔ)存每本書的排名,書名,作者,出版社,價(jià)格以及評(píng)論數(shù)。
import scrapy
class BookspiderItem(scrapy.Item):
rank = scrapy.Field()
name = scrapy.Field()
author = scrapy.Field()
press = scrapy.Field()
price = scrapy.Field()
comments = scrapy.Field()
??BookSpider.py代碼如下,用來具體地爬取數(shù)據(jù)。
import scrapy
from scrapy.selector import Selector
from bookSpider.items import BookspiderItem
class bookSpider(scrapy.Spider):
name = 'bookScrapy'
start_urls = ['http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-recent7-0-0-1-%d'%i for i in range(1,26)]
def parse(self, response):
item = BookspiderItem()
sel = Selector(response)
book_list = response.css('ul.bang_list.clearfix.bang_list_mode').xpath('li')
for book in book_list:
item['rank'] = book.css('div.list_num').xpath('text()').extract_first()
item['name'] = book.css('div.name').xpath('a/text()').extract_first()
item['author'] = book.css('div.publisher_info')[0].xpath('a/text()').extract_first()
item['press'] = book.css('div.publisher_info')[1].xpath('a/text()').extract_first()
item['price'] = book.css('span.price_n').xpath('text()').extract_first()
item['comments'] = book.css('div.star').xpath('a/text()').extract_first()
yield item
??代碼就是這么簡(jiǎn)單,哈哈,別忘了在settings.py中將設(shè)置“ROBOTSTXT_OBEY = False”.
??整個(gè)項(xiàng)目就是這樣啦,最后,我們運(yùn)行命令
scrapy crawl bookScrapy -o dangdang.csv -t csv
這樣就會(huì)把剛才爬取的數(shù)據(jù)保存為dangdang.csv,該文件在spiders目錄下。
dangdang.csv
??打開dangdang.csv,其中的部分內(nèi)容如下:
書的信息
??我們可以發(fā)現(xiàn),書的信息不是有序儲(chǔ)存的,但還是達(dá)到了筆者的要求,怎么樣,是不是覺得Scrapy簡(jiǎn)單又使用呢?強(qiáng)大的Scrapy!