1. 程式人生 > >scrapy框架爬取豆瓣讀書(1)

scrapy框架爬取豆瓣讀書(1)

tin rap 豆瓣 pipe 網頁 xpath from lin tor

1.scrapy框架

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

2.快速開始

scrapy startproject douban
cd到douban根目錄下執行 scrapy genspider Douban book.douban.com
原網頁結構

技術分享圖片

3.xpath提取

xpath是基於XML的樹狀結構,有不同類型的節點,包括元素節點,屬性節點和文本節點,提供在數據結構樹中找尋節點的能力。
xpath初探:
提取書籍排行榜圖片鏈接,以備後續保存
技術分享圖片
提取作者,所在地區
技術分享圖片

4.Douban.py代碼

import scrapy
from douban.items import DoubanBookItem


class BookSpider(scrapy.Spider):
  name = 'douban-book'
  allowed_domains = ['douban.com']
  start_urls = [
    'https://book.douban.com'
  ]

  def parse(self, response):
    # 請求第一頁
    yield scrapy.Request(response.url, callback=self.parse_next)
    #爬取其他頁面
    for page in response.xpath('//div[@class="paginator"]/a'):
      link = page.xpath('@href').extract()[0]
      yield scrapy.Request(link, callback=self.parse_next)

  def parse_next(self, response):
    for item in response.xpath('//tr[@class="item"]'):
      book = DoubanBookItem()
      book['name'] = item.xpath('td[2]/div[1]/a/@title').extract()[0]
      book['content'] = item.xpath('td[2]/p/text()').extract()[0]
      book['ratings'] = item.xpath('td[2]/div[2]/span[2]/text()').extract()[0]
      yield book

5.明天繼續更新items.py、pipelines(管道數據流)、middlewaares(中間件)編寫

技術分享圖片

scrapy框架爬取豆瓣讀書(1)