Scrapy 1.4 文档 01 初窥 Scrapy
初窺 Scrapy
Scrapy 是用于抓取網站并提取結構化數據的應用程序框架,其應用非常廣泛,如數據挖掘,信息處理或歷史存檔。
盡管 Scrapy 最初設計用于網絡數據采集(web scraping),但它也可用于使用 API(如 Amazon Associates Web Services)提取數據或用作通用的網絡爬蟲。
爬蟲(spider)示例
為了向您展示 Scrapy 帶給您的是什么,我們將使用最簡單的方式運行一個爬蟲,向您展示一個 Scrape Spider 的例子。
這是一個爬蟲的代碼,用于從網站 http://quotes.toscrape.com 中抓取名人名言(famous quotes):
import scrapyclass QuotesSpider(scrapy.Spider):name = "quotes"start_urls = ['http://quotes.toscrape.com/tag/humor/',]def parse(self, response):for quote in response.css('div.quote'):yield {'text': quote.css('span.text::text').extract_first(),'author': quote.xpath('span/small/text()').extract_first(),}next_page = response.css('li.next a::attr("href")').extract_first()if next_page is not None:yield response.follow(next_page, self.parse)將其放在一個文本文件中,并將其命名為 quotes_spider.py,使用 runspider 命令啟動爬蟲:
scrapy runspider quotes_spider.py -o quotes.json運行完成后,您將在 quotes.json 文件中看到 JSON 格式化的名人名言列表,包括文本和作者,如下所示(為了獲得更好的可讀性,在這里重新排版了一下):
[{"author": "Jane Austen","text": "\u201cThe person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.\u201d" }, {"author": "Groucho Marx","text": "\u201cOutside of a dog, a book is man's best friend. Inside of a dog it's too dark to read.\u201d" }, {"author": "Steve Martin","text": "\u201cA day without sunshine is like, you know, night.\u201d" }, ...]剛剛發生了什么?
當您運行命令 scrapy runspider quotes_spider.py 時,Scrapy 查找其中的 Spider 定義,并通過抓取引擎運行它。
通過對 start_urls 屬性中定義的 URL(在里,只有一個URL,為標簽(tag)為幽默(humor)的名言)發起請求(making requests)啟動爬蟲,并調用默認的回調方法?parse,參數為響應對象(response)。在 parse 回調方法中,我們使用 CSS 選擇器循環遍歷名言(quote)所在的元素,產生(yield)一個包含名人名言的 Python 字典,然后查找下一頁的鏈接,并使用同樣的回調方法?parse 發起另一個請求。
在這里,您或許注意到了 Scrapy 的主要優點之一:請求和處理是異步的。 這意味著 Scrapy 不需要等待一個請求返回的結果被處理完畢,就可以在此期間發起另一個請求或執行其他操作。 這也意味著即使某些請求失敗了或在處理它時發生錯誤,其他請求仍然可以繼續進行。
雖然這樣可以使您進行非常快速的抓取(以容錯方式同時發起多個請求),Scrapy 也可以讓您通過一些設置來控制爬網的速度。 您可以在每個請求之間設置下載延遲,限制每個域或每個 IP 的并發請求數量,甚至使用自動調節擴展來自動計算這些延遲。
注意
這里使用了?feed exports?來生成 JSON 文件,您可以輕松地更改導出格式(例如,XML 或 CSV)和存儲后臺(例如,FTP 或 Amazon S3)。您還可以編寫一個項目管道(item pipeline)以將項目存儲在數據庫中。
還有什么?
您已經看到如何使用 Scrapy 從網站中提取和存儲數據,但這只是表面的。Scrapy?提供了許多強大的功能使爬取更容易高效,如:
- 內置支持使用擴展的 CSS 選擇器和 XPath 表達式從 HTML/XML 源代碼中選擇和提取數據,支持正則表達式。
- 交互式 shell 控制臺(IPython aware)用于嘗試 CSS 和 XPath 表達式來抓取數據,在編寫或調試您的爬蟲時非常有用。
- 內置支持以多種格式(JSON,CSV,XML)生成 feed exports,并將其存儲在多種后端(FTP,S3,本地文件系統)
- 強大的編碼支持和自動檢測功能,用于處理多種語言的,非標準的和錯誤的編碼聲明。
- 強大的可擴展性,允許您使用信號(signals)和良好定義的API(中間件,擴展和管道)插入自己的功能。
- 廣泛的內置擴展和中間件處理:
- Cookie 和會話處理
- HTTP 功能,如壓縮,身份驗證,緩存
- 用戶代理欺騙
- robots.txt
- 爬取深度限制
- 和更多
- 一個 Telnet 控制臺,用于掛接到 Scrapy 所在的的 Python 控制臺,以便檢查并調試您的爬蟲
- 還有其他好處諸如:可復用的從網站地圖和 XML/CSV 文件中抓取網站的爬蟲,自動下載與被抓取項目相關的圖像(或任何其他多媒體)的媒體管道,可緩存的DNS解析器等等!
下一步是什么?
接下來的步驟是安裝 Scrapy,根據教程創建一個完整的 Scrapy 項目并加入社區。 感謝您的關注!
轉載于:https://www.cnblogs.com/-E6-/p/7211025.html
總結
以上是生活随笔為你收集整理的Scrapy 1.4 文档 01 初窥 Scrapy的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到捡到鸡蛋好吗
- 下一篇: 梦到白色蟒蛇什么预兆