前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scrapy 爬虫实例(一)

Scrapy 爬虫实例(一)

原创
作者头像
HLee
修改2021-06-10 14:21:17
5800
修改2021-06-10 14:21:17
举报
文章被收录于专栏:房东的猫

简介

网站为:https://movie.douban.com/top250

假设,我们抓取top250电影的序列号,电影名,介绍,星级,评价数,电影描述选项

实例

新建项目

在开始爬取之前,您必须创建一个新的Scrapy项目。 进入您打算存储代码的目录中,运行下列命令:

代码语言:javascript
复制
scrapy startproject douban


scrapy.cfg: 项目的配置文件;(用于发布到服务器)
tutorial/: 该项目文件夹。之后将在此编写Python代码。
tutorial/items.py: 项目中的item文件;(定义结构化数据字段field).
tutorial/pipelines.py: 项目中的pipelines文件;(用于存放执行后期数据处理的功能,定义如何存储结构化数据)
tutorial/settings.py: 项目的设置文件;(如何修改User-Agent,设置爬取时间间隔,设置代理,配置中间件等等)
tutorial/spiders/: 放置spider代码的目录;(编写爬取网站规则)

定义Item

Item 定义结构化数据字段,用来保存爬取到的数据;其使用方法和python字典类似。可以通过创建一个 scrapy.Item 类, 并且定义类型为 scrapy.Field的类属性来定义一个Item。

代码语言:javascript
复制
import scrapy

class DoubanItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    # 序列号
    number = scrapy.Field()
    # 电影名
    movie_name = scrapy.Field()
    # 介绍
    introduce = scrapy.Field()
    # 星级
    star = scrapy.Field()
    # 评价数
    evaluate = scrapy.Field()
    # 描述
    describe = scrapy.Field()
    pass

爬虫(Spider)

Spider是开发者编写用于从单个网站(或者一些网站)爬取数据的类。创建一个Spider,必须继承 'scrapy.Spider' 类, 需要定义以下三个属性:

  • name:spider名字,必须是唯一的
  • start_urls:初始的URL列表
  • parse(self, response):每个初始URL完成下载后被调用。
代码语言:javascript
复制
这个函数要完成的功能:
1.负责解析返回的网页数据(response.body),提取结构化数据(生成item)
2.生成需要下一页的请求URL。

以下为我们的第一个Spider代码,保存在 douban/spiders 目录下的 douban.py 文件中:

代码语言:javascript
复制
from douban.items import DoubanItem
import scrapy


class DoubanSpider(scrapy.Spider):
    name = 'douban'  # spider名字,必须是唯一的
    # 允许的域名
    allowed_domains = ['movie.douban.com']
    # 入口URL
    start_urls = ['https://movie.douban.com/top250']  # 初始的URL列表

    # 这个函数要完成的功能:
    # 1.负责解析返回的网页数据(response.body),提取结构化数据(生成item)
    # 2.生成需要下一页的请求URL。
    def parse(self, response):  # 每个初始URL完成下载后被调用
        movie_list = response.xpath("//div[@class='article']//ol[@class='grid_view']/li")
        # 循环电影的条目
        for i_item in movie_list:
            # 导入item,进行数据解析
            douban_item = DoubanItem()

            douban_item['number'] = i_item.xpath(".//div[@class='item']//div[@class='pic']//em/text()").extract_first()

            douban_item['movie_name'] = i_item.xpath(".//div[@class='item']//div[@class='info']//div[@class='hd']/a/span[1]/text()").extract_first()

            # 如果文件有多行进行解析
            content = i_item.xpath(".//div[@class='item']//div[@class='info']//div[@class='bd']/p[1]/text()").extract()
            for i_content in content:
                content_s = "".join(i_content.split())
                douban_item['introduce'] = content_s

            douban_item['star'] = i_item.xpath(".//span[@class='rating_num']/text()").extract_first()

            douban_item['evaluate'] = i_item.xpath(".//div[@class='star']//span[4]/text()").extract_first()

            douban_item['describe'] = i_item.xpath(".//p[@class='quote']/span/text()").extract_first()

            print(douban_item)

            yield douban_item

        # 解析下一页,取后一页的XPATH
        next_link = response.xpath("//span[@class='next']/link/@href").extract()
        if next_link:
            next_link = next_link[0]
            yield scrapy.Request("https://movie.douban.com/top250" + next_link, callback=self.parse)

爬取内容

进入项目的根目录,执行下列命令启动spider:

代码语言:javascript
复制
在命令行输入:
scrapy crawl douban -o 豆瓣电影Top250.json 
或者 
scrapy crawl douban -o 豆瓣电影Top250.csv

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 实例
    • 新建项目
      • 定义Item
        • 爬虫(Spider)
          • 爬取内容
          相关产品与服务
          消息队列 TDMQ
          消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档