Scrapy爬取知名網站的圖書資訊
阿新 • • 發佈:2019-01-22
開啟虛擬環境,建立專案檔案
開啟控制檯,輸入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資料夾裡可以找到:
好,抓取完畢。