scrapy批量爬取豆瓣电影排行信息

scrapy批量爬取豆瓣电影排行信息

  • 1.创建项目
  • 2.编写items
  • 3.douban.py
  • 4.pipelines.py
  • 5.爬取得到的文件

scrapy的使用及其安装请看这里

在这里插入图片描述
使用scrapy框架批量爬取豆瓣电影排行信息,首先看到豆瓣电影链接为
https://movie.douban.com/top250

经过分析,一共10页,第二页,第二页,…,第10页的规律是:

分页规律 第N页
https://movie.douban.com/top250?start=25*(N-1)

分析完毕后,下一步开始创建项目

1.创建项目

# 创建一个名为 douban_mv 的 Scrapy 项目
# 在控制台输入命令如下
scrapy startproject douban_mv 

在这里插入图片描述
然后进入到spiders目录下

cd douban_mv/douban_mv/spiders

在控制台输入命令

scrapy genspider douban https://movie.douban.com/top250

在这里插入图片描述
在进行爬取豆瓣电影排行信息之前需要主要两点

  1. scrapy是遵守robots协议的,如果robots协议禁止爬取的内容,scrapy会默认不去爬取,所以可以把ROBOTSTXT_OBEY=True改为ROBOTSTXT_OBEY=False或者直接注释,这样就无需遵守robots协议,Scrapy就可以不受限制运行。

在settings.py中设置

# Obey robots.txt rules
#ROBOTSTXT_OBEY = True
  1. 在settings.py中设置USER_AGENT
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"

2.编写items

items主要是定义实体类,实体类中定义我们需要的信息

class DoubanMvItem(scrapy.Item):# define the fields for your item here like:title = scrapy.Field()  # 电影名称ratingNum = scrapy.Field() # 电影评分commentCount = scrapy.Field() # 评价人数

3.douban.py

在douban.py中进行编写主要的逻辑

class DoubanSpider(scrapy.Spider):name = "douban"allowed_domains = ["movie.douban.com"]start_urls = ["https://movie.douban.com/top250"]base_url = 'https://movie.douban.com/top250'page = 1def parse(self, response):print("--------------------")# name = //div[@class="article"]//li//div[@class="hd"]//a/span[1]/text()# ratingNum =  //div[@class="article"]//li//div[@class="bd"]/div[@class="star"]/span[2]/text()#commentNum = //div[@class="article"]//li//div[@class="bd"]/div[@class="star"]/span[4]/text()li_list = response.xpath('//div[@class="article"]//li')for li in li_list:title = li.xpath('.//div[@class="hd"]//a/span[1]/text()').extract_first()ratingNum = li.xpath('.//div[@class="bd"]/div[@class="star"]/span[2]/text()').extract_first()commentCount = li.xpath('.//div[@class="bd"]/div[@class="star"]/span[4]/text()').extract_first()mv = DoubanMvItem(title=title, ratingNum=ratingNum, commentCount=commentCount)#  获取一个mv  交给pipeline管道yield mvif self.page<=2:self.page = self.page +1url = self.base_url+'?start='+str(self.page*25)# scrapy.Request就是scrapy就是get请求# url就是请求地址  callback就是回调,也就是要执行的函数 再次调用parse函数yield scrapy.Request(url=url,callback=self.parse)

4.pipelines.py

在使用前需要在settings.py中,打开管道爬取

ITEM_PIPELINES = {"douban_mv.pipelines.DoubanMvPipeline": 300,
}

编写管道文件,将爬取下来的数据下载到表格中

class DoubanMvPipeline:# item就是yield后面的mv对象df = pd.DataFrame()def open_spider(self, spider):print('-----open-----')def process_item(self, item, spider):# 返回 item 对象,交给下一个管道处理series = pd.Series(item)self.df = self.df.append(series,ignore_index=True)return itemdef close_spider(self, spider):print('-----close-----')self.df.to_excel("mv_top250.xlsx")

5.爬取得到的文件

爬取得到的文件如下
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/286091.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚幻学习笔记18—C++委托(多播)和事件

一、前言 委托分单播和多播&#xff0c;多播就是可以绑定多个回调函数&#xff0c;然后一次性执行。这样也可以理解为啥多播没有返回值&#xff0c;多个回调函数执行后返回哪一个都是问题啊。而事件呢官方官方文档说法是“对于事件而言&#xff0c;只有定义事件的类才能调用 Br…

在 linux上运行 Scratch,找到了更github 的项目地址,而且找到了scratch的官方项目。

1&#xff0c;关于Scratch Scratch 是麻省理工学院的“终身幼儿园团队”发布的一种图形化编程工具&#xff0c; 主要面对全球青少年开放&#xff0c;所有人都可以在软件中创作自己的程序。 2&#xff0c;在linux 上面还真有个默认的 scratch 版本 但是太老旧了。 于是找了下…

麒麟V10 ARM内核aarch64 安装harbor redis 存储错误解决办法

安装harbor 里面自带的 redis 报错 “jemalloc: Unsupported system page size” 解决办法 下载指定镜像的redis 替换harbor 自带的redis镜像 修改 docker-compose 文件替换原来的镜像版本。 删除 重构镜像执行&#xff1a; docker-compose up –build 后台启动&#xff…

SCADA助力食品加工数字化变革:未来产业的智慧引擎

一、背景介绍 当前&#xff0c;在国际市场竞争加剧、消费者个性化需求突出的背景下&#xff0c;我国食品加工行业面临着诸多挑战&#xff1a;越发严苛的食品安全标准、追求供应链的透明度和效率、进一步提高产品质量和降低成本等等。 为了应对上述挑战&#xff0c;我国食品加…

生日蜡烛C语言

分析&#xff1a;假设这个人只能活到100岁&#xff0c;如果不这样规定的话&#xff0c;那么这个人就可以假设活到老236岁&#xff0c;直接一次吹236个蜡烛&#xff0c;我们就枚举出所以情况&#xff0c;从一岁开始。 #include <stdio.h> int f(int a,int b){//计算从a到…

《代码随想录》--二叉树(二)

《代码随想录》--二叉树 101.对称二叉树相关题目 101.对称二叉树 leetcode链接 代码实现 递归 class Solution {public boolean isSymmetric(TreeNode root) {if(root null) return true;return compare(root.left,root.right);}public boolean compare(TreeNode left,Tree…

【微服务】springboot整合minio详解

目录 一、前言 二、Minio 概述 2.1 Minio简介 2.1 Minio特点 三、Minio 环境搭建 3.1 部署过程 3.1.1 拉取镜像 3.1.2 启动容器 3.1.3 访问web页面 四、Minio基本使用 4.1 基本概念 4.2 上传文件演示 4.3 用户管理 4.4 Java操作Minio 4.4.1 导入依赖 4.4.2 上传…

Java操作windows系统功能(二)

Java可以通过调用Windows系统的API来操作Windows&#xff0c;实现一些基本的操作&#xff0c;例如打开、关闭窗口、创建文件夹、复制、删除文件等。 具体操作可以引入Java的java.awt和java.awt.event包&#xff0c;并使用java.awt.Desktop类来进行操作。 以下是一些常用的操作…

阿里云登录镜像仓库报错: Error response from daemon: Get https://

阿里云登录镜像仓库报错: Error response from daemon: Get https:// 1. 故障现象 开发反应自用笔记本连接镜像仓库是正常的,但通过服务器连接镜像仓库一直失败. 报错信息如下: Error response from daemon: Get https://registry.cn-hangzhou.aliyuncs.com/v2/: unauthoriz…

避坑指南:uni-forms表单在uni-app中的实践经验

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;uni-app篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:uni-app中forms表单的避坑指南篇 该篇章已被前端圈子收录,点此处进入即可查看更多优质内…

低代码软件开发的革命

一、前言 如果一个概念能在科技圈火起来&#xff0c;它往往兼具字面简明和内涵丰富的特征&#xff0c;并具有某种重塑产业格局的潜力。低代码&#xff08;Low Code&#xff09;就是这样一个典型。顾名思义&#xff0c;低代码是指少用代码&#xff0c;甚至不用代码&#xff0c;仅…

JVM基础扫盲

什么是JVM JVM是Java设计者用于屏蔽多平台差异&#xff0c;基于操作系统之上的一个"小型虚拟机"&#xff0c;正是因为JVM的存在&#xff0c;使得Java应用程序运行时不需要关注底层操作系统的差异。使得Java程序编译只需编译一次&#xff0c;在任何操作系统都可以以相…