Python—Scrapy实践项目

爬取豆瓣电影2022年Top250部经典电影

1.项目概述

        从https://movie.douban/top250爬取电影的标题、评分、主题。我在之前使用普通的爬虫实现了类似的功能,可以对比来进行学习(Python爬虫——爬虫基础模块和类库(附实践项目)

2.实现步骤

1.将response对象包装成一个Selector对象

sel = Selector(response)

2.在网页(第几页无所谓)打开‘检查’,找到我们需要爬取的区域,复制selector,用于css解析。(对应生成list_items)

#content > div > div.article > ol > li


# 获取后需要把li后面的nth-child()去掉,这样我们就获取到所有包含在li中的信息。上面是去掉nth-child后的代码

3.在爬虫中将指定爬取的区域写成css选择器,并返回文本信息

list_item.css('span.title::text').extract_first()


#意义为选择在span标签下为title属性的text类型数据
#由于css选择器返回的对象仍然为css选择器对象,需要使用extract_first使其以字符串类型返回
#选择使用extract_first是为了只获取电影的中文标题
#其他的css选择器与之类似

4.将爬虫爬取到的数据组装成为Item对象——>在items.py中编写MovieItem类,并在爬虫中实例化。将实例化的对象以生成器的形式返回。

5.分析页面的导航栏,可知每个页面的起始电影等于(页面-1)*25。使用for循环就可以爬取后续的页面

for page in range(10):
    yield Request(url=f'https://movie.douban.com/top250?start={page * 25}')


# 生成器返回的对象为Request对象

6.运行爬虫,并将数据写入csv文件中

scrapy crawl douban -o douban.csv

7.将数据写入execl文件:在管道pipelines中写初始化函数(__init__)创建的表 和关闭爬虫时保存execl文件的操作 (关闭爬虫是自动的过程,不要过于纠结,写保存的文件的代码就行了) 

3.代码实现(不包含创建项目的过程)

爬虫部分(douban.py)

import scrapy
from scrapy import Selector, Request
from scrapy.http import HtmlResponse

from spider2107.items import MovieItem


class DoubanSpider(scrapy.Spider):
    name = "douban"
    allowed_domains = ["movie.douban.com"]

    def start_requests(self):
        for page in range(10):
            yield Request(url=f'https://movie.douban.com/top250?start={page * 25}')

    def parse(self, response: HtmlResponse, **kwargs):
        sel = Selector(response)
        list_items = sel.css('#content > div > div.article > ol > li')
        for list_item in list_items:
            movie_item = MovieItem()
            movie_item['title'] = list_item.css('span.title::text').extract_first()
            movie_item['rank'] = list_item.css('span.rating_num::text').extract_first()
            movie_item['subject'] = list_item.css('span.inq::text').extract_first()
            yield movie_item

item对象(items.py)

import scrapy


class MovieItem(scrapy.Item):
    title = scrapy.Field()
    rank = scrapy.Field()
    subject = scrapy.Field()

设置请求头(settings.py)找到对应的位置取消注释并修改即可

USER_AGENT = ("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 "
              "Safari/537.36 Edg/117.0.2045.47")

导入写入execl表时需要的库

pip install openpyxl

管道文件(pipelines.py)

import openpyxl


class Spider2107Pipeline:

    def __init__(self):
        self.wb = openpyxl.Workbook()
        self.ws = self.wb.active
        self.ws.title = "top250"
        self.ws.append(('标题', '评分', '主题'))

    def close_spider(self, spider):
        self.wb.save('电影数据.xlsx')

    def process_item(self, item, spider):
        title = item.get('title', '')
        rank = item.get('rank', '')
        subject = item.get('subject', '')
        self.ws.append((title, rank, subject))
        return item

配置管道(settings.py)找到对应的位置取消注释并修改即可

ITEM_PIPELINES = {
    "spider2107.pipelines.Spider2107Pipeline": 300,
}

4.结果展示

挖取数据

 

 放入execl

随着科技的不断进步,我们的生活变得越来越离不开各种各样的程序。程序已成为我们日常生活和工作不可或缺的一部分,它们可以帮助我们更高效地完成任务,节省时间和精力。今天,我要向大家介绍一款功能强大、用途广泛的程序,它具有万金油般的能力,可以为我们的生活带来极大的便利。 首先,这款程序具有非常强大的功能。它不仅可以帮助我们完成日常的文字处理、数据分析和报表制作等任务,还支持各种格式的文件读取和编辑。同时,它还具有多种工具和插件,可以扩展其功能,满足我们不同的需求。无论是工作还是生活,这款程序都能帮助我们轻松应对各种挑战。 其次,这款程序的界面设计非常友好。它的界面简洁明了,操作简单易懂,即使是不熟悉电脑操作的人也可以轻松上手。同时,它还支持自定义快捷键和界面主题,可以让我们根据自己的习惯和喜好进行个性化设置。 此外,这款程序还具有出色的稳定性和安全性。它采用了先进的技术和算法,可以保护我们的文件和数据安全。同时,它还支持自动备份和恢复功能,即使出现意外情况,也可以帮助我们快速恢复到之前的状态。 总之,这款程序就像生活的万金油一样,具有广泛的应用场景和多种功能。它可以为我们的生活和工作带来便利和效率,帮助我们更好地应对各种挑战。如果您还在为处理各种任务而烦恼,不妨尝试一下这款程序,或许它会成为您的得力助手。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值