【scrapy】scrapy爬取数据指南

2023-11-14

scrapy是爬虫界常用的基于Python爬虫框架,但是网上找了很多这类的文章,发现有多处错误,故为了让刚想尝试爬虫的蜘蛛们少走点坑,故把最新的方法奉上。
在此之前,请先更新你的pip版本,并安装scrapy , pymysql。

pip install scrapy
python3 -m pip install pymysql

首先我的目录结构是这样的,你可以使用如下命令进行初始化

scrapy startproject SpiderObject
//参考:https://blog.csdn.net/skullfang/article/details/78607942

这里写图片描述
1.编写items.py

import scrapy

class MovieItem(scrapy.Item):
    name = scrapy.Field()
    movieInfo = scrapy.Field()
    star = scrapy.Field()
    number = scrapy.Field()
    quote = scrapy.Field()
    pass

2.编写MovieSpider.py

# -*- coding: utf-8 -*-
from scrapy.spider import Spider
from scrapy.http import Request
from scrapy.selector import Selector
from SpiderObject.items import MovieItem

import requests
import time

class MovieSpider(Spider):
     # 爬虫名字
    name = 'MovieSpider'
     # 反爬措施
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'}
    url = 'https://movie.douban.com/top250'
     # start_urls = ['movie.douban.com']

    def start_requests(self):
        # url = 'https://movie.douban.com/top250'
        yield Request(self.url, headers=self.headers, callback=self.parse)

    def parse(self, response):
        item = MovieItem()
        selector = Selector(response)
        movies = selector.xpath('//div[@class="info"]')
        for movie in movies:
            name = movie.xpath('div[@class="hd"]/a/span/text()').extract()
            message = movie.xpath('div[@class="bd"]/p/text()').extract()
            star = movie.xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract()
            number = movie.xpath('div[@class="bd"]/div[@class="star"]/span/text()').extract()
            quote = movie.xpath('div[@class="bd"]/p[@class="quote"]/span/text()').extract()
            if quote:
                quote = quote[0]
            else:
                quote = ''
            item['name'] = ''.join(name)
            item['movieInfo'] = ';'.join(message).replace(' ', '').replace('\n', '')
            item['star'] = star[0]
            item['number'] = number[1].split('人')[0]
            item['quote'] = quote
            yield item
        nextpage = selector.xpath('//span[@class="next"]/link/@href').extract()
        time.sleep(3)
        if nextpage:
            nextpage = nextpage[0]

            yield Request(self.url + str(nextpage), headers=self.headers, callback=self.parse)


3.编写pipelines.py与mysql数据库进行连接

import pymysql

class MoviePipeline(object):
    def __init__(self):
        # 连接数据库
        self.conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='root',
                                    db='DOUBANDB',charset='utf8')
        # 建立游标对象
        self.cursor = self.conn.cursor()
        self.cursor.execute('truncate table Movie')
        self.conn.commit()

    def process_item(self, item, spider):

        try:
            self.cursor.execute("insert into Movie (name,movieInfo,star,number,quote) \
            VALUES (%s,%s,%s,%s,%s)", (item['name'],item['movieInfo'],item['star'],
                                      item['number'],item['quote']))
            self.conn.commit()

        except pymysql.Error:
            print("Error%s,%s,%s,%s,%s" % (item['name'],item['movieInfo'],item['star'],
                                              item['number'],item['quote']))
            return item

4.设置settings.py

这里写图片描述
这里写图片描述

5.搭建mysql数据库

我们通过代码自动访问mysql数据库,
前提是你要先开启mysql连接,并在127.0.0.1下新建数据库DOUBANDB,如图所示:
这里写图片描述

如何用代码自动添加并设计Movie表结构呢:
新建conn_sql.py

import pymysql

db = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='DOUBANDB', charset='utf8')

cursor = db.cursor()

cursor.execute('DROP TABLE IF EXISTS MOVIE')

sql = """CREATE TABLE MOVIE(
          id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '自增 id',
          name VARCHAR(1024) NOT NULL COMMENT '电影名',
          movieInfo VARCHAR(1024) DEFAULT NULL COMMENT '电影简介',
          star VARCHAR(20) NOT NULL COMMENT '评分',
          number VARCHAR(1024) NOT NULL COMMENT '评价人数',
          quote VARCHAR(1024) NOT NULL COMMENT '简评',
          createtime DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间'
          )"""

cursor.execute(sql)

db.close()

6.执行爬取并存入

只需要执行一行代码:

scrapy crawl MovieSpider

7.结果

这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【scrapy】scrapy爬取数据指南 的相关文章

随机推荐

  • PCB天线设计

    PCB天线概述 什么是PCB天线 顾名思义 就是在PCB上印制了一根走线 可以将其画成直线走线 反转的F形走线 蛇形或圆形走线等 长度为四分之一波长就基本可以形成天线 将电信号辐射出去或接收信号 设计指标 在上一期文章 深入解读无线通信中的
  • 二叉树建立

    结束二叉树输入 如何结束创建二叉树的输入那 把二叉树补全 前序 输入 AB C 中序 B A C 后序 B CA 输出结果如下 代码如下 include
  • 前端性能优化:7.页面渲染优化

    本文将主要关注浏览器获取到资源后 进行渲染部分的相关优化内容 7 1 页面渲染性能 页面渲染阶段对性能体验的应i昂与资源加载阶段同样重要 而对于设计高交互频次的应用来说可能更加重要 本节将整个渲染过程划分为五个串行阶段进行概述 优化渲染的实
  • 大众点评校招助理产品经理-笔试题分析(下)

    针对大众点评网的任何一个产品的一个需要改进的点 信息 数据或功能体验都行 给出你的分析和改进规划 希望尽可能的全面 深入 详细 1 改进产品版本与使用机型 使用版本 大众点评Android客户端V5 2版本 机型 HTC Desire HD
  • memset in C++ and C

    definition memset是计算机中C C 语言函数 将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值 第一个值为指定的内存地址 块的大小由第三个参数指定 这个函数通常为新申请的内存做初始化工作 其返回值
  • Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin

    idea编译项目时 出现如下报错 ERROR Failed to execute goal org apache maven plugins maven checkstyle plugin 3 0 0 check validate on p
  • k8s学习笔记(二):k8s的组件介绍

    文章目录 k8s组件介绍 架构图 角色 控制平面组件 Control Plane Components kube apiserver 端口 容器 etcd 端口 容器 kube scheduler 容器 端口 kube controller
  • Postman脚本——断言测试

    pm对象提供了测试相关功能 pm test testName String specFunction Function Function 测试函数 pm expect assertion Function Assertion 允许在响应数据
  • [552]python实现聚类算法(6种算法)

    1 Mean shift 1 概述 Mean shift 即 均值迁移 的基本思想 在数据集中选定一个点 然后以这个点为圆心 r为半径 画一个圆 二维下是圆 求出这个点到所有点的向量的平均值 而圆心与向量均值的和为新的圆心 然后迭代此过程
  • AI炼丹技巧

    目录 样本不平衡 1 什么是样本不平衡问题 2 样本不平衡会对我们模型的训练带来哪些影响呢 3 在机器学习中解决样本不平衡问题有哪些通用的解决策略 4 在深度学习中 有哪些解决样本不平衡的方法 5 从模型评价指标的角度 重新审视训练好的模型
  • 计算机中丢失msvcp140.dll怎么解决?分享三个解决方法

    当我们在运行某些应用程序时 可能会遇到 缺少msvcp140 dll 或 找不到msvcp140 dll 的错误提示 这意味着我们的系统缺少这个重要的动态链接库文件 msvcp140 dll丢失会造成很多软件无法正常启动运行 下面小编就分享
  • 全网最全!Python爬虫requests库教程(附案例)

    1 requests 库简介 Requests 是一个为人类设计的简单而优雅的 HTTP 库 requests 库是一个原生的 HTTP 库 比 urllib3 库更为容易使用 requests 库发送原生的 HTTP 1 1 请求 无需手
  • 【MySQL高级篇笔记-性能分析工具的使用 (中) 】

    此笔记为尚硅谷MySQL高级篇部分内容 目录 一 数据库服务器的优化步骤 二 查看系统性能参数 三 统计SQL的查询成本 last query cost 四 定位执行慢的 SQL 慢查询日志 1 开启慢查询日志参数 2 查看慢查询数目 3
  • 常见的排序算法及其复杂度分析

    1 常见算法分类 十种常见排序算法一般分为以下几种 非线性时间比较类排序 交换类排序 快速排序和冒泡排序 插入类排序 简单插入排序和希尔排序 选择类排序 简单选择排序和堆排序 归并排序 二路归并排序和多路归并排序 线性时间非比较类排序 计数
  • 黑盒测试与白盒测试的区別

    黑盒测试与白盒测试是软件测试中两种不同的测试方法 它们的主要区别在于测试者对被测试软件的了解程度 下面 我们将详细介绍这两种测试方法的特点和适用场景 一 黑盒测试 黑盒测试又称为功能测试 是针对被测试软件的功能进行测试的一种测试方法 测试者
  • linux 进程几种状态,linux进程状态

    linux系统最常用的命令莫过于ps 经常要用其查看linux的进程和线程情况 此文我们着重来看进程 进程又分为以下几种状态 1 运行 正在运行或在运行队列中等待 2 中断 休眠中 受阻 在等待某个条件的形成或接受到信号 3 不可中断 收到
  • Kotlin Coroutines Flow 系列(一) Flow 基本使用

    一 Kotlin Flow 介绍 Flow 库是在 Kotlin Coroutines 1 3 2 发布之后新增的库 官方文档给予了一句话简单的介绍 Flow cold asynchronous stream with flow build
  • C# socket异步通信服务器和客户端

    本文章向大家介绍C socket异步通信服务器和客户端 主要包括C socket异步通信服务器和客户端使用实例 应用技巧 基本知识点总结和需要注意事项 具有一定的参考价值 需要的朋友可以参考一下 服务器代码 只要客户端连接进来就会接收到Se
  • Qt之QTableView 保持滚动条自动滚动到底部

    在使用QTableView添加数据时 当数据量超出显示范围时会自动的打开滚动条 如果设置了在需要时打开滚动条属性 而默认的是滚动条一直是保持在最顶部 但是有些时候我们添加数据时是需要查看添加的最新结果的 所以一般都会把滚动条滚动到最新数据那
  • 【scrapy】scrapy爬取数据指南

    scrapy是爬虫界常用的基于Python爬虫框架 但是网上找了很多这类的文章 发现有多处错误 故为了让刚想尝试爬虫的蜘蛛们少走点坑 故把最新的方法奉上 在此之前 请先更新你的pip版本 并安装scrapy pymysql pip inst