美文网首页
Scrapy学习笔记01-初窥

Scrapy学习笔记01-初窥

作者: KevinLive | 来源:发表于2017-04-28 16:09 被阅读31次

    原文地址:LoveDev

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

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

    安装

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

    创建项目

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

    项目地址:douban

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

    
    $ scrapy startproject douban
    
    

    项目结构:

    项目结构项目结构
    • scrapy.cfg:项目配置文件

    • douban/setting.py:爬虫的设置文件

    • douban/spiders/:爬虫放置文件位置

    修改配置文件

    需要修改 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
    
    
    • name:spider 名字,必须是唯一的

    • allowed_domains:允许爬取的域名

    • start_urls:开始爬取的 URL

    • parse():spider 的一个方法,调用时,会把 start_urls 中 URL 下载生成的 Response 对象作为唯一参数传递给该方法。该方法负责解析返回的数据,提取数据和生成需要进一步处理的 Request 对象

    修改 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

    数据流

    数据流数据流

    相关文章

      网友评论

          本文标题:Scrapy学习笔记01-初窥

          本文链接:https://www.haomeiwen.com/subject/sbfazttx.html