scrapy爬取汽车、车评数据【中】

news2024/11/24 20:46:20

这个爬虫我想分三期来写:
✅ 第一期写如何爬取汽车的车型信息;
✅ 第二期写如何爬取汽车的车评;
✅ 第三期写如何对车评嵌入情感分析结果,以及用简单的方法把数据插入mysql中;
技术基于scrapy框架、BERT语言模型、mysql数据库。

1 编写评论爬虫

评论爬取我们也是基于接口去获取数据,接口利用工具可以测试下:
在这里插入图片描述

这里面关键的参数有 series_or_motor_id,count和offset ,其中count和offset是翻页参数,series_or_motor_id就是我们上一期爬取到的车型的ID,也就是说,根据车型我们可以爬取对应的车评。
下面编写车评的爬虫,在scrapy工程的spider下新建一个comment.py文件:

name = 'comment'
    allowed_domains = ['dongchedi.com']
    start_urls = [
        'https://www.dongchedi.com/motor/pc/ugc/community/cheyou_list?aid=1839&app_name=auto_web_pc&series_or_motor_id=393&sort_type=2&tab_name=dongtai&count=30&offset=0'
    ]

    series_or_motor_ids = [393]  # 可以扩展为多个ID
    count = 30

    def start_requests(self):
        for series_or_motor_id in self.series_or_motor_ids:
            url = f'https://www.dongchedi.com/motor/pc/ugc/community/cheyou_list?aid=1839&app_name=auto_web_pc&series_or_motor_id={series_or_motor_id}&sort_type=2&tab_name=dongtai&count={self.count}&offset=0'
            yield scrapy.Request(url, callback=self.parse, meta={'series_or_motor_id': series_or_motor_id, 'offset': 0})

    def __init__(self, *args, **kwargs):
        super(CommentSpider, self).__init__(*args, **kwargs)
        self.item_count = 0  # 初始化计数器

一开始先爬去固定的ID,等到后续可以拓展为根据数据库里读取的汽车的ID来循环爬取,这边固定写死一个[393]的列表,作开发测试。
解析代码如下:

    def parse(self, response):
        data = json.loads(response.text)
        total_count = data['data']['total_count']
        series_or_motor_id = response.meta['series_or_motor_id']
        offset = response.meta['offset']

        # 提取并处理cheyou_list
        cheyou_list = data['data']['cheyou_list']
        for item in cheyou_list:
            comment_item = CommentItem()
            comment_item['title'] = item.get('title')
            comment_item['content'] = item.get('content')
            comment_item['username'] = item['profile_info'].get('name')
            comment_item['avatar'] = item['profile_info'].get('avatar_url')
            self.item_count += 1  # 增加计数器
            yield comment_item

        # 判断是否需要继续翻页
        if offset + self.count < total_count:
            next_offset = offset + self.count
            next_url = f'https://www.dongchedi.com/motor/pc/ugc/community/cheyou_list?aid=1839&app_name=auto_web_pc&series_or_motor_id={series_or_motor_id}&sort_type=2&tab_name=dongtai&count={self.count}&offset={next_offset}'
            yield scrapy.Request(next_url, callback=self.parse, meta={'series_or_motor_id': series_or_motor_id, 'offset': next_offset})

    def closed(self, reason):
        """爬虫结束时调用"""
        purple_text = f"\033[95m总共爬取了 {self.item_count} 个评论。\033[0m"
        self.logger.info(purple_text)

2 items.py

编写对应的Items,其中label是预留到后面存情感分析结果的:

class CommentItem(scrapy.Item):
    title = scrapy.Field()
    content = scrapy.Field()
    username = scrapy.Field()
    avatar = scrapy.Field()
    label = scrapy.Field()

3 pipelines.py

pipelines里区分一下,因为之前写过一个item了,这边可以针对评论的Item嵌入情感分析评论内容item[‘content’]的过程。

class SentimentPipeline:
    def process_item(self, item, spider):
        # 可以添加保存数据库或文件的逻辑
        # print(item)
        if isinstance(item, CommentItem):
            print('进行情感分析...')
            # TODO
            print(item)
        if isinstance(item, DongchediItem):
            print(item)
        return item

4 运行效果

由于爬取的是接口,所以开发过程非常简单,只需要好好处理翻页参数就可以了:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL Server中关于个性化需求批量删除表的做法

在实际开发中&#xff0c;我们常常会遇到需要批量删除表&#xff0c;且具有共同特征的情况&#xff0c;例如&#xff1a;找出表名中数字结尾的表之类的&#xff0c;本文我将以3中类似情况为例&#xff0c;来示范并解说此类需求如何完成&#xff1a; 第一种&#xff0c;批量删除…

【Godot4.3】图形碰撞相关函数库ShapeTests

概述 最近积累了一些图形重叠检测&#xff0c;以及求图形的轴对齐包围盒Rect2&#xff0c;还有求Rect2的外接圆等函数。感觉可以作为一个单独的函数库&#xff0c;提供日常的使用&#xff0c;所以汇总成了ShapeTests。 注意&#xff1a;函数名和写法可能会不断改进。 代码 …

基于SSM的北京冬奥会志愿者服务系统

文未可获取一份本项目的java源码和数据库参考。 本课题国内外研究现状 当前&#xff0c;国外志愿者服务活动开展的十分活跃。志愿服务正以其突出的社会效益受到越来越多国家政府的重视。许多国家的志愿服务活动起步早、规模大&#xff0c;社会效益好。他们在国内有广泛的群众…

第四届生物医学与智能系统国际学术会议(IC-BIS 2025)

在线投稿&#xff1a;学术会议-学术交流征稿-学术会议在线-艾思科蓝 2025年第四届生物医学与智能系统国际学术会议&#xff08;IC-BIS 2025&#xff09; 将于2025年4月11-13日在意大利隆重举行。 该会议旨在汇集全球学术界和工业界的研究人员、专家和从业人员&#xff0c;共…

C(十)for循环 --- 黑神话情景

前言&#xff1a; "踏过三界宝刹&#xff0c;阅过四洲繁华。笑过五蕴痴缠&#xff0c;舍过六根牵挂。怕什么欲念不休&#xff0c;怕什么浪迹天涯。步履不停&#xff0c;便是得救之法。" 国际惯例&#xff0c;开篇先喝碗鸡汤。 今天&#xff0c;杰哥写的 for 循环相…

android Activity生命周期

android 中一个 activity 在其生命周期中会经历多种状态。 您可以使用一系列回调来处理状态之间的转换。下面我们来介绍这些回调。 onCreate&#xff08;创建阶段&#xff09; 初始化组件&#xff1a;在这个阶段&#xff0c;Activity的主要工作是进行初始化操作。这包括为Ac…

【Bug】STM32F1的PB3和PB4无法正常输出

Bug 使用标准库配置STM32F103C8T6的PB3和PB4引脚输出控制LED灯时&#xff0c;发现引脚电平没有变化无法正常输出高低电平&#xff0c;配置代码如下&#xff1a; GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE ); GPIO_InitStruc…

Maven项目管理入门:POM文件详解与依赖管理

目录 1、pom配置详解 2、依赖管理 2.1 Maven坐标 2.2 依赖导入 1、使用IDEA工具导入&#xff1a; 2、从远程仓库中获取坐标 3、maven插件 maven是一个项目管理工具&#xff0c;其中依靠于一个很重要的xml文件&#xff1a;pom.xml。我们接下来学习下pom.xml文件的配置。 …

论文阅读:PET/CT Cross-modal medical image fusion of lung tumors based on DCIF-GAN

摘要 背景&#xff1a; 基于GAN的融合方法存在训练不稳定&#xff0c;提取图像的局部和全局上下文语义信息能力不足&#xff0c;交互融合程度不够等问题 贡献&#xff1a; 提出双耦合交互式融合GAN&#xff08;Dual-Coupled Interactive Fusion GAN&#xff0c;DCIF-GAN&…

第十三章 集合

一、集合的概念 集合&#xff1a;将若干用途、性质相同或相近的“数据”组合而成的一个整体 Java集合中只能保存引用类型的数据&#xff0c;不能保存基本类型数据 数组的缺点&#xff1a;长度不可变 Java中常用集合&#xff1a; 1.Set(集):集合中的对象不按特定方式排序&a…

FastGPT的使用

fastGPT的介绍&#xff1a; fastGPT其实和chatGPT差不多 但是好处是可以自行搭建&#xff0c;而且很方便 链接&#xff1a;https://cloud.fastgpt.cn/app/list 首先我们可以根据红框点击&#xff0c;创建一个简易的对话引导 这个机器人就非常的简易&#xff0c;只能完成一些翻…

自动驾驶系列—LDW(车道偏离预警):智能驾驶的安全守护者

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

【Linux系统编程】权限

目录 1、shell命令以及运行原理 2、Linux权限的概念 3、Linux权限管理 3.1 文件访问者的分类(人) 3.2 文件类型和访问权限(事物属性) 4、目录的权限 5、粘滞位 1、shell命令以及运行原理 首先&#xff0c;我们来了解一条指令是如何跑起来的 一般操作系统是不会让用户直…

大数据开发--1.2 Linux介绍及虚拟机网络配置

目录 一. 计算机入门知识介绍 软件和硬件的概述 硬件 软件 操作系统概述 简单介绍 常见的系统操作 学习Linux系统 二. Linux系统介绍 简单介绍 发行版介绍 常用的发行版 三. Linux系统的安装和体验 Linux系统的安装 介绍 虚拟机原理 常见的虚拟机软件 体验Li…

招联金融秋招内推2025

【投递方式】 直接扫下方二维码&#xff0c;或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus&#xff0c;使用内推码 igcefb 投递&#xff09; 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策…

四、网络层(下)

4.9 CIDR CIDR&#xff08;Classless Inter-Domain Routing&#xff09;&#xff0c;是IPv4地址分配和路由表选择的一种灵活且高效的方法。 1992年&#xff0c;由于分类地址中的B类地址很快就被分配完了&#xff0c;且路由表中的表项也急剧增加&#xff0c;分类的IP地址并不能…

高校实训产品:教育AI人工智能实训与科研解决方案

保持前沿、提升就业、低成本的教育AI实训全场景方案 产品概述 AIGC实训云图站解决方案为高校提供了灵活、高效的人工智能实训平台。通过弹性裸金属调度技术和GPU虚拟化&#xff0c;实现高性能与低成本的兼顾&#xff0c;为学生和教师提供不受时间和空间限制的实操机会。平台涵…

Linux查看触摸坐标点的方法,触觉智能RK3562开发板,瑞芯微、全志等通用

平时遇到键盘、鼠标、触摸板等输入设备无响应等异常情况时&#xff0c;一般通过更换设备判断异常。但在遇到更换正常设备后&#xff0c;输入仍然异常的情况下&#xff0c;可以借助evtest工具查看内核的上报事件信息&#xff0c;协助定位问题所在。 本次使用的是触觉智能EVB356…

Yolo v11目标检测实战1:对象分割和人流跟踪(附源码)

一、运行效果演示 多目标跟踪 二、基本理论和核心概念 2.1 对象分割 对象分割是指将图像中的每个像素标记为属于某一特定对象或背景的过程。对于YOLO来说&#xff0c;对象分割是其功能的一个扩展&#xff0c;通过添加额外的分支来预测每个检测框内的像素级掩码&#xff0c;从…

Python画笔案例-073 绘制晃悠悠的海龟

1、绘制晃悠悠的海龟 通过 python 的turtle 库绘制 晃悠悠的海龟,如下图: 2、实现代码 绘制晃悠悠的海龟,以下为实现代码: """晃悠悠的海龟.py """ import time # 导入时间模块 import math # 导…