網路爬蟲:使用Scrapy架構編寫一個抓取書籍資訊的爬蟲服務,爬蟲scrapy

來源:互聯網
上載者:User

網路爬蟲:使用Scrapy架構編寫一個抓取書籍資訊的爬蟲服務,爬蟲scrapy
  上周學習了BeautifulSoup的基礎知識並用它完成了一個網路爬蟲( 使用Beautiful Soup編寫一個爬蟲 系列隨筆匯總 ), BeautifulSoup是一個非常流行的Python網路抓取庫,它提供了一個基於HTML結構的Python對象。 雖然簡單易懂,又能非常好的處理HTML資料,但是相比Scrapy而言,BeautifulSoup有一個最大的缺點:慢。
Scrapy 是一個開源的 Python 資料抓取架構,速度快,強大,而且使用簡單。 來看一個官網首頁上的簡單並完整的爬蟲: 非同步,也就是說Scrapy不需要等一個請求完成才能處理下一條請求,而是同時發起另一條請求。 而且,非同步請求的另一個好處是當某個請求失敗了,其他的請求不會受到影響。
安裝(Mac)

pip install scrapy
其他動作系統請參考完整安裝指導:http://doc.scrapy.org/en/latest/intro/install.html
Scrapy中幾個需要瞭解的概念
Spiders Spider類想要表達的是:如何抓取一個確定了的網站的資料。比如在start_urls裡定義的去哪個連結抓取,parse()方法中定義的要抓取什麼樣的資料。 當一個Spider開始執行的時候,它首先從start_urls()中的第一個連結開始發起請求,然後在callback裡處理返回的資料。
Items Item類提供格式化的資料,可以理解為資料Model類。
Selectors Scrapy的Selector類基於lxml庫,提供HTML或XML轉換功能。以response對象作為參數產生的Selector執行個體即可通過執行個體對象的xpath()方法擷取節點的資料。
編寫一個Web爬蟲
接下來將上一個Beautiful Soup版的抓取書籍資訊的例子(使用Beautiful Soup編寫一個爬蟲 系列隨筆匯總)改寫成Scrapy版本。
建立項目
scrapy startproject book_project
這行命令會建立一個名為book_project的項目。
編寫Item類即實體類,代碼如下:
import scrapyclass BookItem(scrapy.Item):    title = scrapy.Field()    isbn = scrapy.Field()    price = scrapy.Field()
  編寫Spider類 設定這個Spider的名稱,允許爬取的網域名稱和從哪個連結開始:
import scrapyfrom book_project.items import BookItemclass BookInfoSpider(scrapy.Spider):    name = "bookinfo"    allowed_domains = ["allitebooks.com", "amazon.com"]    start_urls = [        "http://www.allitebooks.com/security/",    ]

 

遍曆分頁資料的方法
def parse(self, response):    num_pages = int(response.xpath('//a[contains(@title, "Last Page →")]/text()').extract_first())    base_url = "http://www.allitebooks.com/security/page/{0}/"    for page in range(1, num_pages):        yield scrapy.Request(base_url.format(page), dont_filter=True, callback=self.parse_page)

'//a'的意思所有的a標籤;
'//a[contains(@title, "Last Page →")' 的意思是在所有的a標籤中,title屬性包涵"Last Page →"的a標籤;
extract() 方法解析並返回合格節點資料。

從allitebooks.com擷取書籍資訊方法
def parse_page(self, response):        for sel in response.xpath('//div/article'):            book_detail_url = sel.xpath('div/header/h2/a/@href').extract_first()            yield scrapy.Request(book_detail_url, callback=self.parse_book_info)def parse_book_info(self, response):    title = response.css('.single-title').xpath('text()').extract_first()    isbn = response.xpath('//dd[2]/text()').extract_first()    item = BookItem()    item['title'] = title    item['isbn'] = isbn    amazon_search_url = 'https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=' + isbn    yield scrapy.Request(amazon_search_url, callback=self.parse_price, meta={ 'item': item })

 

從amazon.com擷取書籍價格方法            
def parse_price(self, response):    item = response.meta['item']    item['price'] = response.xpath('//span/text()').re(r'\$[0-9]+\.[0-9]{2}?')[0]    yield item

啟動服務開始抓取
scrapy crawl bookinfo -o books.csv
-o books.csv 參數的意思是將抓取的Item集合輸出到csv檔案。除了CSV格式,Scrapy還支援JSON,XML的格式輸入。具體請參考:http://doc.scrapy.org/en/latest/topics/feed-exports.html#topics-feed-exports
結果: https://github.com/backslash112/book_scraper_scrapy我們處於大資料時代,對資料處理感興趣的朋友歡迎查看另一個系列隨筆: 利用Python進行資料分析 基礎系列隨筆匯總

大資料,大資料分析、BeautifulSoup,Beautiful Soup入門,Scrapy, Scrapy爬蟲,資料採礦,資料分析,資料處理,pandas,網路爬蟲,web scraper,python excel,python寫入excel資料,python處理csv檔案 Scrapy csv, python操作Excel,excel讀寫 Scrapy架構 Scrapy架構入門大資料,大資料分析、BeautifulSoup,Beautiful Soup入門,Scrapy, Scrapy爬蟲,資料採礦,資料分析,資料處理,pandas,網路爬蟲,web scraper,python excel,python寫入excel資料,python處理csv檔案 Scrapy csv, python操作Excel,excel讀寫 Scrapy架構 Scrapy架構入門 大資料,大資料分析、BeautifulSoup,Beautiful Soup入門,Scrapy, Scrapy爬蟲,資料採礦,資料分析,資料處理,pandas,網路爬蟲,web scraper,python excel,python寫入excel資料,python處理csv檔案 Scrapy csv, python操作Excel,excel讀寫 Scrapy架構 Scrapy架構入門 大資料,大資料分析、BeautifulSoup,Beautiful Soup入門,Scrapy, Scrapy爬蟲,資料採礦,資料分析,資料處理,pandas,網路爬蟲,web scraper,python excel,python寫入excel資料,python處理csv檔案 Scrapy csv, python操作Excel,excel讀寫 Scrapy架構 Scrapy架構入門 大資料,大資料分析、BeautifulSoup,Beautiful Soup入門,Scrapy, Scrapy爬蟲,資料採礦,資料分析,資料處理,pandas,網路爬蟲,web scraper,python excel,python寫入excel資料,python處理csv檔案 Scrapy csv, python操作Excel,excel讀寫 Scrapy架構 Scrapy架構入門

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.