Scrapy学习笔记01-初窥

2017-04-28  本文已影响31人  KevinLive

原文地址:LoveDev

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

本系列文章灵感来自熊能老司机博客

安装

安装过程请根据自己使用的平台自行 Google,这里是官方的安装指南

创建项目

本项目用于爬取 豆瓣电影Top250 数据,开发工具为 PyCharm

项目地址:douban

Scrapy 需要用命令行创建一个项目:


$ scrapy startproject douban

项目结构:

项目结构项目结构

修改配置文件

需要修改 setting.py 中请求头信息

chrome 访问豆瓣电影Top250 ,然后打开开发者工具并选择 Network 标签,最后刷新界面:

根据获取到的数据修改 setting.py 文件:


# 修改下面两个字段

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',

}

定义数据对象

需要为爬取到的数据提供一个对象,和 Java 中的对象类似,继承于 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()

创建爬虫

scrapy 提供了命令行工具,可以很方便的根据框架中的模板创建一个爬虫


# 显示所有模板

$ scrapy genspider -l

# 查看模板内容

$ scrapy genspider -d basic

# 根据模板生成名为doubanMovie的爬虫文件

$ 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

修改 start_urls 为我们要爬取的 豆瓣电影Top250 ,并用 XPath 解析 Response 对象:


# -*- 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 中第一页的内容了,在命令行中进入项目根目录输入运行命令开始爬取内容并输出到文件中:


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

doubanMovie.json 文件内容:

doubanMovie.jsondoubanMovie.json

数据流

数据流数据流
上一篇下一篇

猜你喜欢

热点阅读