项目十一:爬取热搜榜(小白实战级)

首先,恭喜各位也恭喜自已学习爬虫基础到达圆满级,今后的自已python爬虫之旅会随着网络发展而不断进步。回想起来,我学过请求库requests模块、解析库re模块、lmxl模块到数据保存的基本应用方法,这一次的学习python爬虫之旅收获很多,也希望通过记录的方式一步一步的成长。

接下来我会根据我现有的理论体系来实战。不断突破境界

一般来说,我们在网络生活中都会在搜索引擎中会直接或间接的看到不同的社会内容,而爬取热搜榜下的内容通常会用在不同的创景,主要有以下作用:

  1. 市场分析:通过分析热搜榜,企业可以了解当前的热门话题和趋势,从而调整市场策略或推广活动。
  2. 社会研究:研究者可以利用热搜数据来研究社会动态、公众兴趣和行为模式3。
  3. 新闻机构:新闻媒体可以利用热搜榜快速捕捉热点新闻,及时报道。
  4. 数据可视化:通过数据可视化技术,将热搜数据以图表、散点图等形式展示,使信息更加直观易懂。
  5. 舆情监控:政府或企业可以监控热搜榜,及时了解公众关注的焦点,进行有效的舆情管理。
  6. 内容创作:内容创作者可以根据热搜榜上的热门话题创作相关内容,吸引更多的关注和流量。
  7. 学术研究:学者可以利用热搜数据进行语言学、传播学等领域的研究。
  8. 技术开发:技术人员可以通过实践爬虫技术,提升自己在网络编程、数据解析和自动化处理方面的能力。

第一步: 选定目标网站,分析网站的请求数据,目标网址为热搜榜

下图与上图都是出自同一处请求标头

可以得知上面的数据,我们可以直接构建和添加相应的代码如下

cookies = {
    'Hm_lvt_1d9b8e4e110b54c48922093ef42f94fe': '1647522958', #跟踪用户会话状态,该值表示用户活动时间
    'PHPSESSID': 'e5ne2vg34tkfkjseuduod1q5ss', #会话标识符,用于存储会话信息,如登录状态
    'Hm_lpvt_1d9b8e4e110b54c48922093ef42f94fe': '1647523063', #跟踪用户会话状态,该值表示用户最后一次活动时间
    'UM_distinctid': '17f9806e4e4886-0e3b4c1d996d63-977173c-1fa400-17f9806e4e535f', #用户唯一标识符,用于统计用户的访问次数
    'CNZZDATA1278227787': '951014879-1647514960-%7C1647514960',#网站统计代码,用于统计网站的访问次数
}

headers = {
    'Connection': 'keep-alive',#保持连接
    'Cache-Control': 'max-age=0',#不缓存
    'Upgrade-Insecure-Requests': '1',#允许https
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36',#浏览器标识
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',#接受类型
    'Accept-Language': 'zh-CN,zh;q=0.9',#语言
}

第二步:输出响应信息,以表明爬虫响应成功,代码如下

import requests
url = 'https://hot.meibp.com/'
cookies = {
    'Hm_lvt_1d9b8e4e110b54c48922093ef42f94fe': '1647522958', #跟踪用户会话状态,该值表示用户活动时间
    'PHPSESSID': 'e5ne2vg34tkfkjseuduod1q5ss', #会话标识符,用于存储会话信息,如登录状态
    'Hm_lpvt_1d9b8e4e110b54c48922093ef42f94fe': '1647523063', #跟踪用户会话状态,该值表示用户最后一次活动时间
    'UM_distinctid': '17f9806e4e4886-0e3b4c1d996d63-977173c-1fa400-17f9806e4e535f', #用户唯一标识符,用于统计用户的访问次数
    'CNZZDATA1278227787': '951014879-1647514960-%7C1647514960',#网站统计代码,用于统计网站的访问次数
}

headers = {
    'Connection': 'keep-alive',#保持连接
    'Cache-Control': 'max-age=0',#不缓存
    'Upgrade-Insecure-Requests': '1',#允许https
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36',#浏览器标识
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',#接受类型
    'Accept-Language': 'zh-CN,zh;q=0.9',#语言
}

response = requests.get(url, headers=headers, cookies=cookies) 
if response.status_code == 200:
    print('响应成功')
else:
    print('响应失败:', response.status_code)

输出结果

第三步:分析网站页面结构,确认需要提取的数据元素为热搜类别、标题和链接

先确定热搜类别元素,图下

可以看到热搜类别在a元素中,但是我们选择的是多个类型的热搜,可以使用 XPath 语法来解析 HTML 文档,并从中提取特定数据的 Python 代码。构造代码如下

divs = html.xpath('//div[@class="items"]/div[@class="row"]/div')

然后确定热缩类别下的信息和链接,图下

可以看到选中的页面元素在div元素下,其他热搜信息也都在相同的结构中,可以使用循坏遍历语句

第四步,构建代码

divs = html.xpath('//div[@class="items"]/div[@class="row"]/div')

for div in divs:
    cat = div.xpath('./a/@title')
    for a in div.xpath('./div/div/a'):
        result = {
            "热搜类别": "".join(cat),
            "标题": "".join(a.xpath('./@title')),
            "链接": "".join(a.xpath('./@href'))
        }
        print(result)

第五,构建完整代码

import requests #导入requests模块
from lxml import etree #导入lxml模块
# 定义cookie
cookies = {
    'Hm_lvt_1d9b8e4e110b54c48922093ef42f94fe': '1647522958',
    'PHPSESSID': 'e5ne2vg34tkfkjseuduod1q5ss',
    'Hm_lpvt_1d9b8e4e110b54c48922093ef42f94fe': '1647523063',
    'UM_distinctid': '17f9806e4e4886-0e3b4c1d996d63-977173c-1fa400-17f9806e4e535f',
    'CNZZDATA1278227787': '951014879-1647514960-%7C1647514960',
}
# 定义请求头
headers = {
    'Connection': 'keep-alive',
    'Cache-Control': 'max-age=0',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Accept-Language': 'zh-CN,zh;q=0.9',
}
# 发送请求
response = requests.get('http://hot.meibp.com/', headers=headers, cookies=cookies, verify=False)
# 解析响应内容
html = etree.HTML(response.text)
# 定位到热搜列表
divs = html.xpath('//div[@class="items"]/div[@class="row"]/div')
# 遍历热搜列表
for div in divs:
    cat = div.xpath('./a/@title') # 热搜类别
    for a in div.xpath('./div/div/a'): # 热搜标题和链接
        result = {
            "热搜类别": "".join(cat),
            "标题": "".join(a.xpath('./@title')),
            "链接": "".join(a.xpath('./@href'))
        }
        print(result)

输出结果

可以看到控制台输出信息成功

当然这个代码可以自行添加

import json

with open('data.json', 'w') as file:
    file.write(json.dumps(result, indent=2))

不过有时候做数据分析的时候,一般都是在目录文件下生成,所以我们可以通过接JSON和CSV文件组合使用,代码如下

import requests
from lxml import etree
import json
import csv

cookies = {
        'Hm_lvt_1d9b8e4e110b54c48922093ef42f94fe': '1647522958', #跟踪用户会话状态,该值表示用户活动时间
          'PHPSESSID': 'e5ne2vg34tkfkjseuduod1q5ss', #会话标识符,用于存储会话信息,如登录状态
          'Hm_lpvt_1d9b8e4e110b54c48922093ef42f94fe': '1647523063', #跟踪用户会话状态,该值表示用户最后一次活动时间
          'UM_distinctid': '17f9806e4e4886-0e3b4c1d996d63-977173c-1fa400-17f9806e4e535f', #用户唯一标识符,用于统计用户的访问次数
          'CNZZDATA1278227787': '951014879-1647514960-%7C1647514960',#网站统计代码,用于统计网站的访问次数
}

headers = {
         'Connection': 'keep-alive',#保持连接
         'Cache-Control': 'max-age=0',#不缓存
         'Upgrade-Insecure-Requests': '1',#允许https
         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36',#浏览器标识
         'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',#接受类型
         'Accept-Language': 'zh-CN,zh;q=0.9',#语言
}

# 发送请求
response = requests.get('https://hot.meibp.com/', headers=headers, cookies=cookies, verify=False)
html = etree.HTML(response.text)

# 定位到热搜列表
divs = html.xpath('//div[@class="items"]/div[@class="row"]/div')

# 调整数据结构
rows = [] # 存储热搜数据
for div in divs: # 遍历每一个热搜
    cat = "".join(div.xpath('./a/@title')) # 热搜类别
    for a in div.xpath('./div/div/a'):
        title = "".join(a.xpath('./@title')) # 热搜标题
        link = "".join(a.xpath('./@href')) # 热搜链接
        rows.append([cat, title, link])

# 将数据写入 CSV 文件
with open('data.csv', 'w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerow(["热搜类别", "标题", "链接"])  # 写入表头
    writer.writerows(rows)  # 写入数据行

print("数据已成功写入 data.csv 文件")

输出结果

这样的话比较美观多了,引用数据比较方便。

好了,今日分享到此一游,我是好运,想要好运。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vu3+QuaggaJs实现web页面识别条形码

一、什么是QuaggaJs QuaggaJS是一个基于JavaScript的开源图像识别库,可用于识别条形码。 QuaggaJs的作用主要体现在以下几个方面: 实时图像处理与识别:QuaggaJs是一款基于JavaScript的开源库,它允许在Web浏览器中实现实时的图像…

ASP.NET Core 3 高级编程(第8版) 学习笔记 03

本篇介绍原书的第 18 章,为 19 章 Restful Service 编写基础代码。本章实现了如下内容: 1)使用 Entity Framework Core 操作 Sql Server 数据库 2)Entity Framework Core 数据库迁移和使用种子数据的方法 3)使用中间件…

Qt Quick centerIn和fill 的用法

1)Qt Quick centerIn和fill 的用法: import QtQuick 2.5 Rectangle { width:300; height:200; Rectangle { color: "blue"; anchors.fill: parent; border.width: 6; border.co…

详解工业网关在线探测功能及用途

工业网关专为工业物联网应用设计,可实现包括不同通讯协议之间的兼容和转换,提供软硬件加密保障工业数据安全传输,发挥强大算力实现数据边缘预处理,联动联调工业网络设备实现高效协同等。在线探测功能是佰马工业网关的一项重要功能…

unity学习(89)——unity塞满c盘!--删除editor下的log文件

卸了一个视频后强制续命打开详细信息: 这个再往下找也是没用的! 显示隐藏文件夹后!执行如下操作! 30个g! 其中unity占23g editer占了21g 删除C:\Users\王栋林\AppData\Local\Unity\Editor下的log文件 恢复到之前的水…

使用 Flask 和 WTForms 构建一个用户注册表单

在这篇技术博客中,我们将使用 Flask 和 WTForms 库来构建一个用户注册表单。我们将创建一个简单的 Flask 应用,并使用 WTForms 定义一个注册表单,包括用户名、密码、确认密码、邮箱、性别、城市和爱好等字段。我们还将为表单添加验证规则&…

【C 数据结构】图

文章目录 【 1. 基本原理 】1.1 无向图1.2 有向图1.3 基本知识 【 2. 图的存储结构 】2.1 完全图2.2 稀疏图和稠密图2.3 连通图2.3.1 (普通)连通图连通图 - 无向图非连通图 的 连通分量 2.3.2 强连通图强连通图 - 有向图非强连通有向图 的 强连通分量 2.3.3 生成树 - 连通图2.3…

美区视频带货“一哥”,一周销量狂干三十万美金!

“超店有数显示,Tybuggy上周带货狂揽34.3万美金,超出第二名近30倍。” TikTok风波再起,4月17日,美众议院推出援乌援以军事议案,值得注意的是,TikTok剥离法案被“打包”夹带其中,以此加大再参议…

LLM应用实战:当KBQA集成LLM(二)

1. 背景 又两周过去了,本qiang~依然奋斗在上周提到的项目KBQA集成LLM,感兴趣的可通过传送门查阅先前的文章《LLM应用实战:当KBQA集成LLM》。 本次又有什么更新呢?主要是针对上次提到的缺点进行优化改进。主要包含如下方面&#…

【Linux笔记】基本指令(一)

一道残阳铺水中 半江瑟瑟半江红 目录 Linux基本指令 罗列目录内容:ls 指令 显示当前目录位置信息:pwd 指令 切换工作目录:cd 指令 创建文件修改时间戳:touch指令 创建空目录:mkdir指令 删除空目录:rmdir指…

1.3K Star我上位机项目中用了这个开源项目

软件介绍 ClientServerProject的软件是一款基于C-S(客户端-服务器)架构的通用开发框架,为中小型系统的快速开发提供强大的支持。该框架由服务端、客户端以及公共组件三部分组成,不仅提供了基础的账户管理、版本控制、软件升级、公…

输入法重大漏洞曝光,仅华为幸免,近10亿用户受影响

近日,Citizenlab研究人员调查了多家厂商的输入法应用安全漏洞并报告称:除华为以外,百度、荣耀、科大讯飞、OPPO、三星、腾讯、Vivo和小米等供应商的九款应用程序中有八款均存在安全漏洞。 随着用户规模的不断增长,云输入法应用的…

kubernetes中DaemonSet控制器

一、概念 使用DaemonSet控制器,相当于在节点上启动了一个守护进程。通过DaemonSet控制器可以确保在每个节点上运行Pod的一个副本。如果有心的node节点加入集群,则DaemonSet控制器会自动给新加入的节点增加一个Pod的副本;反之,当有…

GPT的全面历史和演变:从GPT-1到GPT-4

人工智能新篇章:GPT-4与人类互动的未来! 本文探讨了生成式预训练 Transformer (GPT) 的显着演变,提供了从开创性的 GPT-1 到复杂的 GPT-4 的旅程。 每次迭代都标志着重大的技术飞跃,深刻影响人工智能领域以及我们与技术的互动。 我…

vmware虚拟机网络“桥接模式”与“NAT模式”的联网原理及linux环境下IP配置指引

一、vmware虚拟机网络“桥接模式”与“NAT模式”的区别 选中虚拟机》设置》网络适配器,打开虚拟机设置面板 我们看到网络连接处有多个选项,今天良哥通过试验告诉你“桥接模式”和“NAT模式”的联网原理、区别及两种模式下IP地址配置的详细方法。 桥接模…

YOLOv9改进策略 | 添加注意力篇 | LSKAttention大核注意力机制助力极限涨点 (附多个位置添加教程)

一、本文介绍 本文给大家带来的改进机制是LSKAttention大核注意力机制应用于YOLOv9。它的主要思想是将深度卷积层的2D卷积核分解为水平和垂直1D卷积核,减少了计算复杂性和内存占用。接着,我们介绍将这一机制整合到YOLOv9的方法,以及它如何帮…

面试经典150题——路径总和

​ 1. 题目描述 2. 题目分析与解析 2.1 思路一 注意题目的关键点:判断该树中是否存在 根节点到叶子节点 的路径,起点是root,终点是叶子节点。 那么我们就可以从根节点按照层序遍历的方式,从根节点从根到 叶子不断对路径进行加…

MPC的横向控制与算法仿真实现

文章目录 1. 引言2. 模型预测控制(MPC)2.1 基础知识2.2 MPC的整体流程2.3 MPC的设计求解 3. 车辆运动学MPC设计4. 算法和仿真实现 1. 引言 随着智能交通系统和自动驾驶技术的发展,车辆的横向控制成为了研究的热点。横向控制指的是对车辆在行…

vue3环境搭建

环境准备: node环境(node.js官网)npm环境 上述两个环境存在版本要求所以安装最新的靠谱(旧的环境存在不支持现象) windows电脑 安装完node.js会带有npm mac电脑本身自带node和npm,但是需要升级 进入到你想创建前端项目的文件夹:…

C++初识内存管理和模版

目录 前言 1.C/C内存分布 2. C的内存管理方式 2.1 new/delete操作内置类型 2. new和delete操作自定义类型 3. operator new和operator delete函数 4. new和delete的实现原理 4.1 内置类型 4.2 自定义类型 5. malloc/free和new/delete的区别 6. 初识模版 6.1 泛型编…