Scrapy學(xué)習(xí)筆記01-初窺

原文地址:LoveDev

Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫(xiě)的應(yīng)用框架。 可以應(yīng)用在包括數(shù)據(jù)挖掘,信息處理或存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中。

本系列文章靈感來(lái)自熊能老司機(jī)博客

安裝

安裝過(guò)程請(qǐng)根據(jù)自己使用的平臺(tái)自行 Google,這里是官方的安裝指南

創(chuàng)建項(xiàng)目

本項(xiàng)目用于爬取 豆瓣電影Top250 數(shù)據(jù),開(kāi)發(fā)工具為 PyCharm

項(xiàng)目地址:douban

Scrapy 需要用命令行創(chuàng)建一個(gè)項(xiàng)目:


$ scrapy startproject douban

項(xiàng)目結(jié)構(gòu):

項(xiàng)目結(jié)構(gòu)
項(xiàng)目結(jié)構(gòu)
  • scrapy.cfg:項(xiàng)目配置文件

  • douban/setting.py:爬蟲(chóng)的設(shè)置文件

  • douban/spiders/:爬蟲(chóng)放置文件位置

修改配置文件

需要修改 setting.py 中請(qǐng)求頭信息

chrome 訪問(wèn)豆瓣電影Top250 ,然后打開(kāi)開(kāi)發(fā)者工具并選擇 Network 標(biāo)簽,最后刷新界面:

根據(jù)獲取到的數(shù)據(jù)修改 setting.py 文件:


# 修改下面兩個(gè)字段

USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'

# Scrapy HTTP Request使用的header

DEFAULT_REQUEST_HEADERS = {

'Accept': 'text/event-stream',

'Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4,zh-HK;q=0.2',

}

定義數(shù)據(jù)對(duì)象

需要為爬取到的數(shù)據(jù)提供一個(gè)對(duì)象,和 Java 中的對(duì)象類似,繼承于 scrapy.Item 類,定義類型為 scrapy.Field 的屬性字段:


import scrapy

class Item(scrapy.Item):

title = scrapy.Field()

pic = scrapy.Field()

link = scrapy.Field()

score = scrapy.Field()

commentsNum = scrapy.Field()

創(chuàng)建爬蟲(chóng)

scrapy 提供了命令行工具,可以很方便的根據(jù)框架中的模板創(chuàng)建一個(gè)爬蟲(chóng)


# 顯示所有模板

$ scrapy genspider -l

# 查看模板內(nèi)容

$ scrapy genspider -d basic

# 根據(jù)模板生成名為doubanMovie的爬蟲(chóng)文件

$ scrapy genspider -t basic doubanMovie douban.com

生成的 doubanMovie.py 文件:


# -*- coding: utf-8 -*-

import scrapy

class DoubanmovieSpider(scrapy.Spider):

name = "doubanMovie"

allowed_domains = ["douban.com"]

start_urls = ['http://douban.com/']

def parse(self, response):

pass

  • name:spider 名字,必須是唯一的

  • allowed_domains:允許爬取的域名

  • start_urls:開(kāi)始爬取的 URL

  • parse():spider 的一個(gè)方法,調(diào)用時(shí),會(huì)把 start_urls 中 URL 下載生成的 Response 對(duì)象作為唯一參數(shù)傳遞給該方法。該方法負(fù)責(zé)解析返回的數(shù)據(jù),提取數(shù)據(jù)和生成需要進(jìn)一步處理的 Request 對(duì)象

修改 start_urls 為我們要爬取的 豆瓣電影Top250 ,并用 XPath 解析 Response 對(duì)象:


# -*- coding: utf-8 -*-

import scrapy

from douban.movie import Movie

import re

class DoubanMovieSpider(scrapy.Spider):

name = "doubanMovie"

allowed_domains = ["douban.com"]

start_urls = [

'https://movie.douban.com/top250',

]

def parse(self, response):

item = Movie()

for sel in response.xpath('//div[@class="item"]'):

item['title'] = sel.xpath('div/a/img/@alt').extract_first()

item['pic'] = sel.xpath('div/a/img/@src').extract_first()

item['link'] = sel.xpath('div/a/@href').extract_first()

item['info'] = sel.xpath('div[2]/div[2]/p[2]/span/text()').extract_first()

item['score'] = sel.xpath('div[2]/div[2]/div/span[2]/text()').extract_first()

item['commentsNum'] = sel.xpath('div[2]/div[2]/div/span[4]/text()').re(r'[0-9]+')[0]

yield item

到此就可以爬取 豆瓣電影Top250 中第一頁(yè)的內(nèi)容了,在命令行中進(jìn)入項(xiàng)目根目錄輸入運(yùn)行命令開(kāi)始爬取內(nèi)容并輸出到文件中:


$ scrapy crawl doubanMovie -o ~/Downloads/doubanMovie.json

doubanMovie.json 文件內(nèi)容:

doubanMovie.json
doubanMovie.json

數(shù)據(jù)流

數(shù)據(jù)流
數(shù)據(jù)流
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • scrapy學(xué)習(xí)筆記(有示例版) 我的博客 scrapy學(xué)習(xí)筆記1.使用scrapy1.1創(chuàng)建工程1.2創(chuàng)建爬蟲(chóng)模...
    陳思煜閱讀 13,077評(píng)論 4 46
  • 這兩天摸索了下scrapy,剛看文檔的時(shí)候覺(jué)得有點(diǎn)生無(wú)可戀,scrapy框架個(gè)人還是覺(jué)得比較難懂的,需要學(xué)習(xí)的地方...
    Treehl閱讀 5,844評(píng)論 7 10
  • scrapy是python最有名的爬蟲(chóng)框架之一,可以很方便的進(jìn)行web抓取,并且提供了很強(qiáng)的定制型,這里記錄簡(jiǎn)單學(xué)...
    bomo閱讀 2,323評(píng)論 1 11
  • 早上,天都是黑的,我媽打開(kāi)了燈,刺眼的光硬是將我拽起來(lái),我知道,我該起床趕火車了,可是才五點(diǎn)半啊。我又躺回去,瞇著...
    炸雞好吃會(huì)長(zhǎng)胖閱讀 328評(píng)論 0 0
  • 無(wú)數(shù)個(gè)日夜 我得到又失去 直到,直到某天 余暉恰巧投入我的窗戶 我裝了滿懷憧憬 以為捕捉到了永恒 我以微弱的燭火 ...
    瑾檀yuying閱讀 275評(píng)論 11 15

友情鏈接更多精彩內(nèi)容