本文用 Scrapy 爬蟲架構爬取專門供爬蟲初學者訓練用的網站:http://books.toscrape.com/
- 打開虛拟環境建立項目檔案
-
- 打開控制台輸入workon py3scrapy
- 進入虛拟環境所在盤我的是E盤
- 建立項目檔案輸入scrapy startproject demo建立的項目檔案叫demo
- 檢視項目目錄下的檔案輸入treeF demo
-
- 打開所爬取網站分析所爬取的内容
- 編寫代碼實作爬蟲
- 運作代碼抓取資料
打開虛拟環境,建立項目檔案
打開控制台,輸入 workon py3scrapy
workon py3scrapy
進入虛拟環境所在盤(我的是E盤)
建立項目檔案,輸入 scrapy startproject demo
(建立的項目檔案叫demo)
scrapy startproject demo
在E盤可以找到所建立的檔案夾。
檢視項目目錄下的檔案,輸入 tree/F demo
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" target="_blank" rel="external nofollow" >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檔案夾裡可以找到:
好,抓取完畢。