本次将會使用Scrapy來爬取當當網的圖書暢銷榜,其網頁截圖如下:
我們的爬蟲将會把每本書的排名,書名,作者,出版社,價格以及評論數爬取出來,并儲存為csv格式的檔案。項目的具體建立就不再多講,可以參考
上一篇部落格,我們隻需要修改items.py檔案,以及建立一個爬蟲檔案BookSpider.py.
items.py檔案的代碼如下,用來儲存每本書的排名,書名,作者,出版社,價格以及評論數。
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代碼如下,用來具體地爬取資料。
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
代碼就是這麼簡單,哈哈,别忘了在settings.py中将設定“ROBOTSTXT_OBEY = False”.
整個項目就是這樣啦,最後,我們運作指令
scrapy crawl bookScrapy -o dangdang.csv -t csv
這樣就會把剛才爬取的資料儲存為dangdang.csv,該檔案在spiders目錄下。
打開dangdang.csv,其中的部分内容如下:
我們可以發現,書的資訊不是有序儲存的,但還是達到了筆者的要求,怎麼樣,是不是覺得Scrapy簡單又使用呢?強大的Scrapy!