1. 程式人生 > >Scrapy爬取知名網站的圖書資訊

Scrapy爬取知名網站的圖書資訊

開啟虛擬環境,建立專案檔案

開啟控制檯,輸入workon py3scrapy

這裡寫圖片描述

進入虛擬環境所在盤(我的是E盤)

這裡寫圖片描述

建立專案檔案,輸入scrapy startproject demo(建立的專案檔案叫demo)

這裡寫圖片描述
在E盤可以找到所建立的資料夾。
這裡寫圖片描述

檢視專案目錄下的檔案,輸入tree/F demo

這裡寫圖片描述
好,到此專案檔案就建立成功了。

開啟所爬取網站,分析所爬取的內容。

可以看出,每一本書的資訊包裹在<article class="product_pod">元素內
這裡寫圖片描述
書名資訊在其下的 **h3** > a元素的 **title** 屬性中


這裡寫圖片描述
書價資訊在其下<p class="price_color">£51.77</p>的文字中。
這裡寫圖片描述
由於這個網頁有50頁,下一頁的URL在 ul.pager>li.next>a元素的href屬性中
如:<li class="next"><a href="catalogue/page-2.html">next</a></li>
這裡寫圖片描述

編寫程式碼,實現爬蟲

spider目錄下,建立一個book_spider.py檔案。
這裡寫圖片描述
執行無錯誤。
程式碼如下:

# -*- coding:utf-8 -*-
import
scrapy class BooksSpider(scrapy.Spider): #爬蟲唯一標識 name = "books" #爬取的起始點 start_urls = ['http://books.toscrape.com/'] def parse(self, response): #提取資訊 for book in response.css('article.produce_pod'): #書名資訊 name = book.xpath('./h3/a/@title').extract_first() #書價資訊
price = book.css('p.price_color::text').extract_first() yield{ 'name':name, 'price':price, } #提取連結 next_url = response.css('ul.pager li.next a::attr(href)').extract_first() if next_url: #如果找到下一位URL,得到絕對路徑,構造新的Request物件 next_url = response.urljoin(next_url) yield scrapy.Request(next_url, callback = self.parse)

執行程式碼,抓取資料

在控制檯輸入scrapy crawl books -o books.csv回車
這裡寫圖片描述
等程式執行完,在demo資料夾裡可以找到:
這裡寫圖片描述
好,抓取完畢。