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 HtmlResponsefrom spider2107.items import MovieItemclass 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 scrapyclass 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 openpyxlclass Spider2107Pipeline:def __init__(self):self.wb = openpyxl.Workbook()self.ws = self.wb.activeself.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

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

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

相关文章

矩阵的相似性度量的常用方法

矩阵的相似性度量的常用方法 1,欧氏距离 欧式距离是最易于理解的一种距离计算方法,源自欧式空间中两点间的距离公式。 (1)二维平面上的点 a ( x 1 , y 1 ) a(x_1,y_1) a(x1​,y1​)和点 b ( x 2 , y 2 ) b(x_2,y_2) b(x2​,y2​)的欧式距离为 d ( x …

【网络】抓包工具Wireshark下载安装和基本使用教程

🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁 🦄 个人主页——🎐开着拖拉机回家_Linux,大数据运维-CSDN博客 🎐✨🍁 🪁🍁 希望本文能够给您带来一定的帮助&#x1…

javaee ssm框架项目整合thymeleaf2.0 更多thymeleaf标签用法 项目结构图

创建ssmthymeleaf项目 创建ssmthymeleaf项目参考此文 thymeleaf更多常用标签 <!DOCTYPE html> <html lang"en" xmlns:th"http://www.thymeleaf.org"> <head><meta charset"UTF-8"><title>Title</title> …

怎么压缩ppt文件?

怎么压缩ppt文件&#xff1f;造成ppt文件体积太大的原因主要有两个&#xff1a;① 图片和媒体文件&#xff0c;PPT中使用高分辨率、大尺寸的图片或视频文件会增加文件大小。如果未经压缩或优化&#xff0c;这些文件可能会占用较大的存储空间&#xff1b;② 动画和特效&#xff…

Super-jacoco应用统计代码覆盖率及问题处理

一、原文地址 滴滴开源Super-jacoco&#xff1a;java代码覆盖率收集平台 - 掘金 二、背景 我要使用Super-jacoco&#xff0c;对手工测试&#xff0c;进行代码覆盖率的统计。 为什么使用Super-jacoco&#xff0c;而不是直接使用jacoco&#xff0c;因为Super-jacoco解决了增量…

STC89C51基础及项目第13天:小车go、软件调速

1. 小车散件组装_推荐相同接线&#xff08;259.104&#xff09; 2. L9110s电机控制器接线&#xff08;260.105&#xff09; L9110s电机模块开发 接通VCC&#xff0c;GND 模块电源指示灯亮&#xff0c; 以下资料来源官方&#xff0c;但是不对&#xff0c;根据下节课实际调试 …

WPF向Avalonia迁移(一、一些通用迁移项目)

通用变更 WPF&#xff1a;Visibility 其他参考文档 WPF&#xff1a; <TextBlock Visibility"Visible"/><TextBlock Visibility"Collapsed"/><TextBlock Visibility"Hidden"/>Avalonia &#xff1a; <TextBlock IsVisib…

POI 和 EasyExcel 操作 Excel

一、概述 目前操作 Excel 比较流行的就是 Apache POI 和阿里巴巴的 easyExcel。 1.1 POI 简介 Apache POI 是用 Java 编写的免费开源的跨平台的 Java API&#xff0c;Apache POI 提供 API 给 Java 程序对 Microsoft Office 格式文档读和写的常用功能。POI 为 “Poor Obfuscati…

20231008工作心得:sql

1.SQL语句里的if的嵌套使用 if(product A and brand_name B,C,if(product A and brand_name !B,D,product)) as product if&#xff08;A,B,C&#xff09;。SQL里if函数&#xff0c;如果条件A成立&#xff0c;就显示B的值&#xff0c;否则就显示C。 这个代码的意思的&#x…

RabbitMQ 介绍与 SpringBootAMQP使用

一、MQ概述 异步通信的优点&#xff1a; 耦合度低吞吐量提升故障隔离流量削峰 异步通信的缺点&#xff1a; 依赖于Broker的可靠性、安全性、吞吐能力架构复杂&#xff0c;业务么有明显的流程线&#xff0c;不方便追踪管理 什么是的MQ MQ&#xff08;Message Queue&#xf…

ARM-day5作业

.text .global _start _start: 1、设置GPIOE、GPIOF寄存器的时钟使能 RCC_MP_AHB4ENSETR[4]->1 0x50000a28 LDR R0,0x50000a28 LDR R1,[R0] ORR R1,R1,#(0x3<<4) STR R1,[R0]2、设置PE10、PF10、PE8管脚为输出模式 GPIOE_MODER[21:20]->01 0x50006000…

Flask与PyQt结合使用时候,阻塞,界面卡死

一.问题起因 做了个服务端, 使用到了python的PYQT6和Flask, PYQT做的是个简单的设置界面: 但是在点击开始运行, 写入flask run的代码的时候, PYQT界面卡死了 代码如下: # 生产环境模式server make_server(0.0.0.0, ser_port, app)server.serve_forever()app.run() 二.问题产…

【Python】WebUI自动化—如何用Selenium IDE录制脚本生成单元测试代码(基于Chrome)(17)

一.Selenium IDE介绍 Selenium IDE是Chrome和FireFox浏览器中的插件&#xff0c;Selenium IDE结合浏览器提供脚本录制、脚本回放、脚本编辑、元素定位等功能&#xff0c;使用Selenium IDE可以将录制的脚本生成相应单元测试框架的自动化测试脚本&#xff0c;录制脚本支持导出Py…

Meta分析的流程及方法

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;最早出现于“循证医学”&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面。…

【数据结构】栈和队列-- OJ

目录 一 用队列实现栈 二 用栈实现队列 三 设计循环队列 四 有效的括号 一 用队列实现栈 225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09; typedef int QDataType; typedef struct QueueNode {struct QueueNode* next;QDataType data; }QNode;typedef struct …

使用docker搭建nacos单机、集群 + mysql

单机搭建 1 拉取mysql镜像 docker pull mysql:5.7.40 2 启动mysql容器 docker run -d --namemysql-server -p 3306:3306 -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD123456 mysql:5.7.40 3 执行nacos的数据库脚本 /* * Copyright 1999-2018 Alibaba Group Holding L…

ctfshow web入门 php特性 web136-web140

1.web136 还有一种写文件的命令时tee命令 payload&#xff1a; : ls /|tee 1 访问1下载查看文件1发现根目录下有flag cat /f149_15_h3r3|tee 2 访问下载查看文件22.web137 call_user_func <?php class myclass {static function say_hello(){echo "He…

Graphviz 作图工具

选择 Graphviz 作为作图工具&#xff0c;主要是想通过代码创建图标&#xff0c;按照 Graphviz 的代码规范就可以生成 svg 的图片。当然&#xff0c;这样的工具也有很多&#xff0c;有些 markdown 编辑器也做了集成&#xff0c;比如&#xff1a; flowchart.jsMermaid 了解 Gra…

打印字节流和字符流

打印字节流和字符流 printStream/ printWriter的构造器和方法都是一样的 package printfile;import java.io.FileOutputStream; import java.io.OutputStream; import java.io.PrintStream; import java.io.PrintWriter; import java.nio.charset.Charset;public class Prin…

Postgresql中的C/C++混编(JIT)

1 Postgresql编译JIT 整体上看使用了GCC、G编译文件&#xff0c;最后用G汇总&#xff1a; GCC编译的三个.o文件llvmjit、llvmjit_deform、llvmjit_expr llvmjit.c -> llvmjit.o gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -…