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

首先,恭喜各位也恭喜自已学习爬虫基础到达圆满级,今后的自已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 jsonwith open('data.json', 'w') as file:file.write(json.dumps(result, indent=2))

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

import requests
from lxml import etree
import json
import csvcookies = {'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 文件")

输出结果

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

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

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

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

相关文章

模块三:二分——153.寻找旋转排序数组中的最小值

文章目录 题目描述算法原理解法一:暴力查找解法二:二分查找疑问 代码实现解法一:暴力查找解法二:CJava 题目描述 题目链接:153.寻找旋转排序数组中的最小值 根据题目的要求时间复杂度为O(log N)可知需要使用二分查找…

vue集成百度地图vue-baidu-map

文章目录 vue集成百度地图vue-baidu-map1. Vue Baidu Map文档地址2. 设置npm数据源3. 安装vue-baidu-map4. 配置vue-baidu-map4.1 main.js全局注册4.2 vue页面设置4.3 效果 vue集成百度地图vue-baidu-map 1. Vue Baidu Map文档地址 https://dafrok.github.io/vue-baidu-map/#…

Golang GMP解读

概念梳理 1. 1 线程 通常语义中的线程,指的是内核级线程,核心点如下: 是操作系统最小调度单元;创建、销毁、调度交由内核完成,cpu 需完成用户态与内核态间的切换;可充分利用多核,实现并行. …

Unity之圆环slider

一、参考文章 Unity_圆环滑动条(圆形、弧形滑动条)_unity弧形滑动条-CSDN博客 此滑动条拖动超过360后继续往前滑动值会从0开始,正常我们超过360度时不可在滑动。 二、 超过360度不可滑动问题解决 参考HTML文章制作: https://www.c…

SpringCloud系列(15)--Eureka自我保护

前言:在上一章节中我们说明了一些关于Eureka的服务发现功能,也用这个功能进行接口的实现,在本章节则介绍一些关于Eureka的自我保护 1、Eureka保护模式概述 保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。默认情况…

论文辅助笔记:LLM-Mob metric测量

0 导入库 import os import pandas as pd from sklearn.metrics import f1_score import ast import numpy as np1 基本的metric计算方式 1.1 get_acc1_f1 def get_acc1_f1(df):#计算top1 prediction的准确度和f1 scoreacc1 (df[prediction] df[ground_truth]).sum() / le…

开源数据集分享———猫脸码客

猫脸码客作为一个专注于开源数据集分享的公众号,致力于为广大用户提供丰富、优质的数据资源。我们精心筛选和整理各类开源数据集,涵盖机器学习、深度学习、自然语言处理等多个领域,以满足不同用户的需求。 (https://img-blog.csdnimg.cn/d98…

Exploiting CXL-based Memory for Distributed Deep Learning——论文泛读

ICPP 2022 Paper CXL论文阅读笔记整理 问题 深度学习(DL)正被广泛用于解决不同领域的科学应用中的复杂问题。DL应用程序使用大规模高性能计算(HPC)系统来训练给定的模型,需要消耗大量数据。这些工作负载具有很大的内…

Git for Windows 下载与安装

当前环境:Windows 8.1 x64 1 打开网站 https://git-scm.com/ ,点击 Downloads 。 2 点击 Windows 。 3 选择合适的版本,这里选择了 32-bit Git for Windows Portable。 4 解压下载后的 PortableGit-2.44.0-32-bit.7z.exe ,并将 P…

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

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

好用的在线客服系统PHP源码(开源代码+终身使用+安装教程) 制作第一步

创建一个在线客服系统是一个涉及多个步骤的过程,包括前端界面设计、后端逻辑处理、数据库设计、用户认证、实时通信等多个方面。以下是使用PHP制作在线客服系统的第一步:需求分析和系统设计。演示:ym.fzapp.top 第一步:需求分析 确…

分布式技术在文本摘要生成中的应用

摘要 自然语言处理首先要应对的是如何表示文本以供机器处理,随着网络技术的发展和信息的公开,因特网上可供访问的数字文档成爆炸式的增长,文本摘要生成逐渐成为了自然语言处理领域的重要研究课题。本文主要介绍了分布式技术在文本摘要生成中…

基于springboot+vue+Mysql的广场舞团管理系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

猫头虎分享已解决Bug || TypeError: Cannot read property ‘map‘ of undefined**

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

智慧养猪场视频AI智能监控与可视化管理方案

在科技日新月异的今天,智能化、自动化已成为众多行业追求的方向。养猪业作为传统农业的重要组成部分,同样迎来了技术革新的春风。特别是随着人们对食品安全等问题的日益关注,养猪场视频监控监管方案的智能化升级显得尤为重要。 养猪场视频智…

Android11适配

1.分区存储 1.1.背景 Android 11 进一步增强了平台功能,为外部存储设备上的应用和用户数据提供了更好的保护。作为这项工作的一部分,平台引入了进一步的改进,以简化向分区存储的转换。 为了让用户更好地控制自己的文件,保护用户…

(C++) share_ptr 之循环引用

文章目录 🚩前言🚩循环引用🕹️例子1Code😭shared_ptr (错误)😂weak_ptr (正确)😭unique_ptr (错误) 🕹️例子2Code &…

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

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

LORA详解

参考论文: low rank adaption of llm 背景介绍: 自然语言处理的一个重要范式包括对一般领域数据的大规模预训练和对特定任务或领域的适应处理。在自然语言处理中的许多应用依赖于将一个大规模的预训练语言模型适配到多个下游应用上。这种适配通常是通过…

DiT论文精读Scalable Diffusion Models with Transformers CVPR2023

Scalable Diffusion Models with Transformers CVPR2023 Abstract idea 将UNet架构用Transformer代替。并且分析其可扩展性。 并且实验证明通过增加transformer的宽度和深度,有效降低FID 我们最大的DiT-XL/2模型在classconditional ImageNet 512、512和256、256基…