系统学习数据库day13

该博客介绍了如何利用Scrapy框架爬取豆瓣Top250电影的相关信息,包括电影名称、简介、评分等。首先创建Scrapy项目,定义Item结构,然后生成并修改爬虫,实现数据抓取。在`parse`方法中,通过XPath解析HTML,提取电影列表,并使用`yield`将数据传递给Pipeline。最后,通过设置请求头避免频繁输入命令,可将爬虫输出结果保存到CSV文件。
摘要由CSDN通过智能技术生成

scrapy 框架

框架: 软件半成品, 基础的部分不用自己写, 直接用
目标站点 https://movie.douban.com/top250

pip install scrapy

创建scrapy项目

scrapy startproject spider_douban

下面来简单介绍一下各个主要文件的作用:

> scrapy.cfg :项目的配置文件
spider_douban包:项目的Python模块,将会从这里引用代码
spider_douban/items.py :项目的目标文件
spider_douban/pipelines.py :项目的管道文件
spider_douban/settings.py :项目的设置文件
spider_douban/spiders/ :存储爬虫代码目录

明确目标(items.py)

我们打算抓取:https://movie.douban.com/top250信息

  1. 打开spider_douban目录下的items.py

  2. Item 定义结构化数据字段,用来保存爬取到的数据,有点像Python中的dict,但是提供了一些额外的保护减少错误。

  3. 可以通过创建一个 scrapy.Item 类, 并且定义类型为 scrapy.Field的类属性来定义一个Item。
    接下来,创建一个SpiderDoubanItem 类和构建item模型(model)

  • items.py
# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy
class SpiderDoubanItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    # 序号
    serial_number = scrapy.Field()
    # 电影名称
    movie_name = scrapy.Field()
    # 电影介绍
    introduce = scrapy.Field()
    # 电影 星级
    star = scrapy.Field()
    # 电影评价人数
    evalute = scrapy.Field()
    # 电影描述
    describe = scrapy.Field()


爬虫功能要分成两步
1.爬数据
切换到 C:\Users\Eric\Documents\GitHub\mysqlandPython\day14\spider_douban\spider_douban执行

scrapy genspider douban250 movie.douban.com

scrapy genspider 生成一个爬虫项目, 后面第一个参数douban250是会在spiders包中自动生成的一个py文件, 第二个参数是movie.douban.com是爬取目标站点的二级域名
在这里插入图片描述
修改start_url 在这里插入图片描述
修改parse方法

def parse(self, response):
    print(response.text)

执行爬虫命令

scrapy crawl douban250  # douban250就是name的名字

在setting.py中添加请求头(第19行)
在这里插入图片描述
重新执行

scrapy crawl douban250

可以在后台看到数据
在这里插入图片描述
为避免频繁输入命令可以创建main.py
在这里插入图片描述

from scrapy import cmdline
cmdline.execute('scrapy crawl douban250'.split())

第一版

# -*- coding: utf-8 -*-
import scrapy
from  spider_douban.items import SpiderDoubanItem
class Douban250Spider(scrapy.Spider):
    # 继承scrapy.Spider,这里是爬虫名字,不能和项目名字重复
    name = 'douban250'
    # 允许的域名
    allowed_domains = ['movie.douban.com']
    # 入口 url,扔到调度器里面
    start_urls = ['https://movie.douban.com/top250']

    # 默认解析方法
    def parse(self, response):
        movie_list = response.xpath('//div[@id="content"]//ol/li')
        print(len(movie_list))
        for i_item in movie_list:
            douban_item = SpiderDoubanItem()
            douban_item['movie_name'] = i_item.xpath('div[@class="item"]/div[@class="info"]/div[@class="hd"]/a/span[1]/text()').extract_first()
            print(douban_item)
            # 序号

            # 电影介绍
            # 电影 星级
            # 电影评价人数
            # 电影描述
            yield douban_item  #
            # 不进行 yield 无法进入 pipelines 里面,将获取的数据交给pipelines
        # 解析下一页
        next_link = response.xpath('//span[@class="next"]/link/@href').extract()
        # 如果有就一直取下一页
        if next_link:
            next_link = next_link[0]
            # 将获取的数据交给pipelines
            # 第一个参数是下一页的链接, 第二个参数是回调函数 的名字
            yield scrapy.Request('https://movie.douban.com/top250'+next_link, callback=self.parse)

在main.py中修改

from scrapy import cmdline
cmdline.execute('scrapy crawl douban250 -o douban.csv'.split())
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值