scrapy

scrapy

Scrapy,Python開發的一個快速、高層次的螢幕抓取和web抓取框架,用於抓取web站點並從頁面中提取結構化的數據。Scrapy用途廣泛,可以用於數據挖掘、監測和自動化測試。Scrapy吸引人的地方在於它是一個框架,任何人都可以根據需求方便的修改。它也提供了多種類型爬蟲的基類,如BaseSpider、sitemap爬蟲等,最新版本又提供了web2.0爬蟲的支持。Scrap,是碎片的意思,這個Python的爬蟲框架叫Scrapy。

基本信息

基本功能

Scrapy是一個為遍歷爬行網站、分解獲取數據而設計的應用程式框架,它可以套用在廣泛領域:數據挖掘、信息處理和或者歷史片(歷史記錄)打包等等

Even though Scrapy was originally designed for screen scraping (more precisely, web scraping), it can also be used to extract data using APIs (such as Amazon Associates Web Services) or as a general purpose web crawler.

儘管小刮刮原本是設計用來螢幕抓取(更精確的說,是網路抓取)的目的,但它也可以用來訪問API來提取數據,比如Amazon的AWS或者用來當作通常目的套用的網路蜘蛛

The purpose of this document is to introduce you to the concepts behind Scrapy so you can get an idea of how it works and decide if Scrapy is what you need.

本文檔的目的是介紹一下小刮刮背後的概念,這樣你會了解它是如何工作的,以決定它是不是你需要的

如何開始

當你準備啟動一個項目時,可以從這個教程開始

選擇網站

選擇一個網站

如果你需要從某個網站提取一些信息,但是網站不提供API或者其他可程式的訪問機制,那么小刮刮可以幫助你(提取信息)

讓我們看下mininova網站,需要提取的網址,名稱,描述和torrent檔案的大小、添加日期

下面這個列表是所有今天新增的torrents檔案的頁面:參考擴展閱讀1

備註:torrent是洪流的意思,這裡指bit torrent,比特洪流,就是我們常說的BT檔案

定義數據

定義你要抓取的數據

第一件事情就是定義你要抓取的數據,在小刮刮這個是通過定義Scrapy Items來實現的(本例是BT檔案)

這就是要定義的Item

1 2 3 4 5 6 fromscrapy.item import Item,Field class Torrent(Item): url = Field() name = Field() description = Field() size = Field()

撰寫蜘蛛

撰寫一個蜘蛛來抓取數據

下一步是寫一個指定起始網址的蜘蛛(參考擴展閱讀1),包含follow連結規則和數據提取規則

如果你看一眼頁面內容,就會發現所有的torrent網址都是類似:參考擴展閱讀2的樣子,其中Number是一個整數,我們將用正則表達式,例如/tor/\d+.來提取規則

我們將使用Xpath,從頁面的HTML Source裡面選取要要抽取的數據,選取眾多數據頁面中的一個,例如參考閱讀3

根據頁面HTML 源碼,建立XPath,選取:torrent name, description , size,這些數據

通過帶可以看到

Home[Eng]XviD-OVD

name屬性包含在H1 標籤內,使用 XPath expression提取:

//h1/text()

description在id=”description“的div中

<h2>Description:</h2><divid="description">"HOME"-adocumentaryfilmbyYannArthus-Bertrand<br/><br/>***<br/><br/>"Wearelivinginexceptionaltimes.Scientiststellusthatwehave10yearstochangethewaywelive,avertthedepletionofnaturalresourcesandthecatastrophicevolutionoftheEarth'sclimate....

XPath提取

//div[@id="description"]

size屬性在第二個<p>tag,id=specifications的div內

<divid="specifications"><p><strong>Category:</strong><ahref="/cat/4">Movies</a>&gt;<ahref="/sub/35">Documentary</a></p><p><strong>Totalsize:</strong>699.79&nbsp;megabyte</p>

XPath expression提取

//div[@id="specifications"]/p/text()

如果要了解更多的XPath 參考這裡 XPath reference.

蜘蛛代碼如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 class MininovaSpider(CrawlSpider): name = '參考閱讀4' allowed_domains = [ '參考閱讀4' ] start_urls = [ '參考閱讀1' ] rules = [Rule(SgmlLinkExtractor(allow = [ '/tor/\d+' ]), 'parse_torrent' )] def parse_torrent( self ,response): x = HtmlXPathSelector(response) torrent = TorrentItem() torrent[ 'url' ] = response.url torrent[ 'name' ] = x.select( "//h1/text()" ).extract() torrent[ 'description' ] = x.select( "//div[@id="description"]" ).extract() torrent[ 'size' ] = x.select( "//div[@id="info left

相關詞條

相關搜尋

熱門詞條

聯絡我們