【爬虫实战】python微博热搜榜Top50

news2024/11/20 11:40:50

一.最终效果

二.项目代码

2.1 新建项目

本文使用scrapy分布式、多线程爬虫框架编写的高性能爬虫,因此新建、运行scrapy项目3步骤:

1.新建项目:
scrapy startproject weibo_hot

2.新建 spider:
scrapy genspider hot_search "weibo.com"

3.运行 spider:
scrapy crawl hot_search

注意:hot_search 是spider中的name

4.编写item:

class WeiboHotItem(scrapy.Item):

    index = scrapy.Field()
    topic_flag = scrapy.Field()
    icon_desc_color = scrapy.Field()
    small_icon_desc = scrapy.Field()
    small_icon_desc_color = scrapy.Field()
    is_hot = scrapy.Field()
    is_gov = scrapy.Field()
    note = scrapy.Field()
    mid = scrapy.Field()
    url = scrapy.Field()
    flag = scrapy.Field()
    name = scrapy.Field()
    word = scrapy.Field()
    pos = scrapy.Field()
    icon_desc = scrapy.Field()

5.编写爬虫解析代码:


import os
from itemadapter import ItemAdapter
from .settings import DATA_URI
from .Utils import Tool

tool = Tool()


class WeiboHotPipeline:

    def open_spider(self, spider):

        self.hot_line = "index,mid,word,label_name,raw_hot,category,onboard_time\n"

        data_dir = os.path.join(DATA_URI)
        file_path = data_dir + '/hot.csv'
        #判断文件夹存放的位置是否存在,不存在则新建文件夹
        if os.path.isfile(file_path):
            self.data_file = open(file_path, 'a', encoding='utf-8')
        else:
            if not os.path.exists(data_dir):
                os.makedirs(data_dir)
            self.data_file = open(file_path, 'a', encoding='utf-8')
            self.data_file.write(self.hot_line)

    def close_spider(self, spider):  # 在关闭一个spider的时候自动运行
        self.data_file.close()

    def process_item(self, item, spider):
        try:

            hot_line = '{},{},{},{},{},{},{}\n'.format(
                item.get('index', ''),
                item.get('mid', ''),
                item.get('word', ''),
                item.get('label_name', ''),
                item.get('raw_hot', ''),
                tool.translate_chars(item.get('category', '')),
                tool.get_format_time(item.get('onboard_time', '')),
            )
            self.data_file.write(hot_line)
        except BaseException as e:
            print("hot错误在这里>>>>>>>>>>>>>", e, "<<<<<<<<<<<<<错误在这里")
        return item

三.注意事项

settings.py配置项修改


# Obey robots.txt rules
ROBOTSTXT_OBEY = False # 关闭,否则根据weibo的爬虫策略爬虫无法获取数据

如果

四.运行过程

五.项目说明文档

六.获取完整源码

爱学习的小伙伴,本次案例的完整源码,已上传微信公众号“一个努力奔跑的snail”,后台回复 热搜榜 即可获取。

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

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

相关文章

AI低代码维格云日历视图怎么用?

日历视图,是一个以天为单位,清晰展示当月所有日程的视图。在团队协作的过程中,我们常常会碰到以下场景: 制作项目日历,让团队成员知道每天需要完成什么任务; 制作排课表,给老师和教室安排课程; 制作会议日历,提醒团队成员进行每周计划与回顾; 制作营销日历,把握全年…

23面向对象案例1

目录 1、计算连续表达式的一个过程 2、优化后的代码 为什么不能return resultn&#xff1f; 3、用面向对象的方法可以解决冗余的问题&#xff0c;但是还是不能解决result的值可以被随意修改的问题 4、解决不能被随意修改的问题&#xff0c;可以将类属性改成私有变量吗&…

Marvin攻击25 年之久的RSA解密漏洞重现

1998 年发现的与 SSL 服务器中的 PKCS #1 v1.5 填充相关的缺陷&#xff08;据信已得到解决&#xff09;至今仍然影响着多个广泛使用的项目。 经过衡量端到端操作的广泛测试后&#xff0c;红帽研究人员发现了原始定时攻击的几种变体&#xff0c;统称为“马文攻击”&#xff0c;…

343. 整数拆分 96.不同的二叉搜索树

343. 整数拆分 设dp[i]表示拆分 数字i 出来的正整数相乘值最大的值 (i - j) * j,和dp[i - j] * j是获得dp[i]的两种乘法&#xff0c;在里面求最大值可以得到当前dp[i]的最大值&#xff0c;但是这一次的得出的最大值如果赋值给dp[i]&#xff0c;可能没有没赋值的dp[i]大&#…

springboot aop详解

springboot aop的实现方式有哪些 在 Spring Boot 中&#xff0c;AOP&#xff08;面向切面编程&#xff09;是通过 Spring Framework 提供的 AOP 模块来实现的。Spring AOP 提供了几种实现方式来应用切面编程&#xff0c;包括以下几种&#xff1a; 基于代理的 AOP&#xff1a; …

CSS变量 var()的用法

写在前面 这里介绍一下开发中常用的css变量var()&#xff0c;它可以实现样式的动态设置&#xff0c;使用方法主要分为全局使用和局部使用两种。 如何定义CSS变量var() 在CSS文件中&#xff0c;变量需要使用 – 作为前缀来定义&#xff0c;后面跟上变量名和值&#xff0c;如&a…

基于人工电场优化的BP神经网络(分类应用) - 附代码

基于人工电场优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于人工电场优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.人工电场优化BP神经网络3.1 BP神经网络参数设置3.2 人工电场算法应用 4.测试结果…

ARM +FPGA GPIB IP核实现

目前在数据发生其技术上居领先的是美国的 Tektronix 公司和 Agilent 公司。 Agilent 公司的台式脉冲 / 数据发生器家族的最高时钟频率达 3GHz &#xff08;定 时发生器&#xff09;&#xff0c;数据发生器 E81200 在通道数为 8CH 时数据速率为 660Mb/s, 即可以产…

22python生命周期的一种案例

第一个问题&#xff0c;什么叫生命周期&#xff1f; 生命周期就是一个对象从产生到消亡的一个周期过程&#xff0c;总体来说是一个这样的 展示一下生命周期的一点点的小案例吧~ 1、利用全局变量 #以下是一个python展示生命周期的方法过程 personCount 0 class Person:def _…

月薪过二万的Java面试

文章目录 &#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作者、产品软文创造者、技术文章评审老师、问卷调查设计师、个人社区创始人、开源项目贡献者。&#x1f30e;跑过十五…

创新YOLOv5改进:结合全新可变形大核注意力(D-LKA Attention)实现多尺度目标涨点

🔥🔥🔥 提升多尺度目标检测,创新提升 🔥🔥🔥 🔥🔥🔥 捕捉图像特征和处理复杂图像特征 🔥🔥🔥 👉👉👉: 本专栏包含大量的新设计的创新想法,包含详细的代码和说明,具备有效的创新组合,可以有效应用到改进创新当中 👉👉👉: 🐤🐤�…

Java并发面试题:(一)线程的5种状态及转换

线程的状态转换 1、新建状态&#xff08;New&#xff09;&#xff1a;新创建了一个线程对象。 2、就绪状态&#xff08;Runnable&#xff09;&#xff1a;线程对象创建后&#xff0c;其他线程调用了该对象的start()方法。该状态的线程位 于可运行线程池中&#xff0c;变得可运…

设计模式(1)-设计模式前置基础知识

1&#xff0c;设计模式概述 1.1 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中&#xff0c;而是被用于建筑领域的设计中。 1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫亚历山大&#xff08;Christopher Alexand…

三大方法快速发现商业规律

文章目录 三大方法快速发现商业规律一、市场调研二、数据分析三、案例分析 &#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作者、产品软文创造者、技术文章评审老师、问卷调查…

新时代高效记账:自动化智能如何进行财务管理

随着科技的不断发展&#xff0c;自动化智能已经逐渐渗透到我们生活的各个领域。在财务管理中&#xff0c;自动化智能的应用显得尤为重要。它不仅可以提高财务管理的效率和精度&#xff0c;还能帮助我们更好地规划和掌控公司的财务状况 晨曦记账本提供了多种高效财务管理工具。…

【linux kernel】对linux内核设备的注册机制和查找机制分析

文章目录 1、简介2、device_initialize分析3、device_add分析4、总结 &#x1f53a;【linux内核系列文章】 &#x1f449;对一些文章内容进行了勘误&#xff0c;本系列文章长期不定时更新&#xff0c;希望能分享出优质的文章&#xff01; 1、《linux内核数据结构分析之哈希表》…

冲刺十五届蓝桥杯P0006平面切分

文章目录 题目思路代码总结 题目 平面切分 思路 这道题是一个思维题把&#xff0c;之前没有接触过平面几何的知识&#xff0c;做起来感觉还是比较难的&#xff0c;用到的set集合和自己创建一个类 首先我们知道&#xff0c;一根直线A是可以将平面切分成两块的&#xff0c;如…

如何能优化网站开展速度

随着互联网技术的飞速发展&#xff0c;网站加载速度已经成为一个不可忽视的关键要素。 当您的网站速度缓慢&#xff0c;不仅会影响用户的访问体验&#xff0c;还可能导致用户的流失。以下是一些创新的技巧和策略&#xff0c;帮助您提升网站打开速度。 一、在图像压缩上做文章 …

ArcGIS JS API 演示Demo

ArcGIS JS API Demo演示地址 https://ralucanicola.github.io/JSAPI_demos/ ArcGIS JS API Demo下载地址 https://github.com/RalucaNicola/JSAPI_demos

PyTorch入门教学——使用PyCharm创建一个PyTorch项目

首先需要创建好PyTorch的虚拟环境&#xff0c;步骤&#xff1a;PyTorch入门教学——简介与环境配置-CSDN博客打开PyCharm&#xff0c;新建项目&#xff0c;选择项目的存放位置。选择先前配置的解释器&#xff0c;也就是虚拟环境中的解释器。&#xff08;记住创建的虚拟环境所在…