精通Scrapy網路爬蟲【一】第一個爬蟲專案

小旺不正經發表於2021-06-19

初識Scrapy

一個網路爬蟲程式的基本執行流程可以總結為以下迴圈

1.下載頁面一個網頁的內容本質上就是一個HTML文字,爬取一個網頁內容之前,首先要根據網頁的URL下載網頁。

2.提取頁面中的資料當一個網頁(HTML)下載完成後,對頁面中的內容進行分析,並提取出我們感興趣的資料,提取到的資料可以以多種形式儲存起來,比如將資料以某種格式(CSV、JSON)寫入檔案中,或儲存到資料庫(MySQL、MongoDB)中。

3.提取頁面中的連結通常,我們想要獲取的資料並不只在一個頁面中,而是分佈在多個頁面中,這些頁面彼此聯絡,一個頁面中可能包含一個或多個到其他頁面的連結,提取完當前頁面中的資料後,還要把頁面中的某些連結也提取出來,然後對連結頁面進行爬取(迴圈1-3步驟)。

使用pip install scrapy安裝scrpay
在這裡插入圖片描述輸入scrapy
測試是否安裝成功
在這裡插入圖片描述

編寫第一個爬蟲專案

使用scrapystartproject命令:
在這裡插入圖片描述
在這裡插入圖片描述

分析頁面

http://books.toscrape.com/
開啟開發者工具進行分析
在這裡插入圖片描述

可以看到,每一本書的資訊包裹在
<article class="product_pod">元素中:
書名資訊在其下<h3 > a元素的title屬性中,如<ahref="catalogue/a-light-in-the-attic_1000/index.html"title="ALight in the Attic">A Light in the ...</a>;
書價資訊在其下<p class="price_color">元素的文字中,如<p class="price_color">£51.77</p>

分析next按鈕
在這裡插入圖片描述

可以發現,下一頁的URL在ul.pager > li.next > a元素的href屬性中,是一個相對URL地址,如<li class="next"><ahref="catalogue/page-2.html">next</a></li>

編寫爬蟲

scrapy genspider book_spider http://books.toscrape.com/
建立spider
在這裡插入圖片描述

編寫

import scrapy


class BookSpiderSpider(scrapy.Spider):
    name = 'book_spider'
    # allowed_domains = ['http://books.toscrape.com/']
    start_urls = ['http://books.toscrape.com//']

    def parse(self, response):
        for book in response.css('article.product_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:
            next_url=response.urljoin(next_url)
            yield scrapy.Request(next_url,callback=self.parse)

在shell中執行scrapy crawl book_spider執行爬蟲
在這裡插入圖片描述
從上述資料可以看出,我們成功地爬取到了1000本書的書名和價格資訊(50頁,每頁20項)。

參考資料:《精通Scrapy網路爬蟲》劉碩 清華大學出版社

相關文章