Python 爬虫项目实战(二):爬取微博热搜榜

news2024/9/23 3:28:08

前言

网络爬虫(Web Crawler),也称为网页蜘蛛(Web Spider)或网页机器人(Web Bot),是一种按照既定规则自动浏览网络并提取信息的程序。爬虫的主要用途包括数据采集、网络索引、内容抓取等。

爬虫的基本原理

  1. 种子 URL:爬虫从一个或多个种子 URL 开始,这些 URL 是起点。
  2. 发送请求:爬虫向这些种子 URL 发送 HTTP 请求,通常是 GET 请求。
  3. 获取响应:服务器返回网页的 HTML 内容作为响应。
  4. 解析内容:爬虫解析 HTML 内容,提取所需的数据(如文本、链接、图片等)。
  5. 提取链接:从网页中提取出所有链接,并将这些链接加入待访问队列。
  6. 重复过程:爬虫重复上述步骤,直到达到某个停止条件,如爬取了一定数量的页面,或所有页面都被爬取完毕。

爬虫的分类

  1. 通用爬虫

    • 设计用于抓取整个互联网的大量网页。搜索引擎(如 Google、Bing)的爬虫就是通用爬虫。
  2. 聚焦爬虫

    • 专注于特定主题或领域,抓取相关网页。比如,一个新闻爬虫只抓取新闻网站的内容。
  3. 增量爬虫

    • 仅抓取自上次爬取以来发生变化或更新的网页,适用于动态内容更新频繁的网站。

爬虫的合法性和道德

在编写和运行爬虫时,必须遵循以下原则:

  1. 遵守网站的 robots.txt

    • 大多数网站都有一个 robots.txt 文件,规定了哪些页面允许被爬取,哪些不允许。爬虫应当尊重这些规则。

  2. 避免过度抓取

    • 设置适当的抓取频率,避免对服务器造成过大负担。
  3. 尊重版权和隐私

    • 不应抓取或使用受版权保护的内容,或涉及用户隐私的数据。
  4. 获取许可

    • 在某些情况下,最好获得网站管理员的许可,特别是当你打算频繁地抓取大量数据时。

通过以上方法和原则,可以编写高效、可靠且合规的网络爬虫来满足数据采集的需求。 

侦察

这个比较简单,直接抓包就可以看到数据来源

保存请求网址 

检查数据在页面标签中的位置

标题在 td-02 中 

热度在 span 中

源代码

import parsel
import csv
import requests


# 创建 csv 文件
# 'a' 表示以追加模式(append mode)打开文件
# newline=''的作用是确保在写入文件时,所有的换行符都使用'\n'
f = open('res.csv', 'a', encoding='utf-8', newline='')

# csv.DictWriter 类用于将字典格式的数据写入 CSV 文件
# 每个字典表示一行,字典的键对应 CSV 文件的列名
csv_writer = csv.DictWriter(f, fieldnames=['排名', '标题', '热度'])

# 写入表头行,包含指定的字段名
csv_writer.writeheader()

# 请求地址
url = 'https://s.weibo.com/top/summary?cate=realtimehot'

# 伪造请求头及 cookie
headers = {
    'cookie': 'SUB=_2AkMR8Bzkf8NxqwFRmf0XzGvjb4x3zwHEieKnrO0_JRMxHRl-yT9kqmMHtRB6OnAyC3ZtjaT5q1jwM0_aHrCMEvlnAj-o; SUBP=0033WrSXqPxfM72-Ws9jqgMF55529P9D9WFTP2MxWPjMdfqH2lQ8Jx9_; _s_tentry=passport.weibo.com; Apache=9034410052178.598.1722586067660; SINAGLOBAL=9034410052178.598.1722586067660; ULV=1722586067671:1:1:1:9034410052178.598.1722586067660:',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'
}

response = requests.get(url, headers=headers)

# 使用 parsel.Selector 类将响应文本传递给 Selector 对象
# Selector 对象能够解析和处理 HTML 或 XML 文本
selector = parsel.Selector(response.text)

# 选择 <div id='pl_top_realtimehot'> 中的 tbody 中的 tr
trs = selector.css('#pl_top_realtimehot tbody tr')

# 定义排序
num = 1

for tr in trs:
    # .get() 方法从 SelectorList 中提取第一个匹配项的内容。如果没有匹配项,它将返回 None
    # 获取热搜标题
    title = tr.css('.td-02 a::text').get()

    # 获取热搜热度
    hot = tr.css('.td-02 span::text').get()

    # 创建字典保存数据
    dic = {
        '排名': num,
        '标题': title,
        '热度': hot,
    }

    print(dic)

    # writerow 写入数据
    csv_writer.writerow(dic)

    num += 1

项目效果

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

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

相关文章

iPhone苹果密码解锁工具专业版_不限制电脑

iPhone苹果密码解锁工具专业版_不限制电脑 Aiseesoft iPhone Unlocker&#xff1a;轻松解锁iPhone。功能强大&#xff1a;一键移除4位、6位密码、Touch ID和Face ID。 隐私保护&#xff1a;创建密码&#xff0c;安全无忧。数据提醒&#xff1a;解锁时&#xff0c;注意数据和设…

自制安卓车机软件(含APP)

本软件使用APPinventor2编程软件&#xff0c;耗时5天和3天调试&#xff0c;具有高德导航&#xff0c;视频播放&#xff0c;网易云音乐&#xff0c;酷狗&#xff0c;抖音&#xff0c;&#xff08;需下载车机版软件&#xff09;和自定义添加软件&#xff0c;网页有哔哩哔哩&#…

STM32F103 SPI详解及示例代码1

1 SPI协议详解 SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;是美国摩托罗拉公司&#xff08;Motorola&#xff09;最先推出的一种同步串行传输规范&#xff0c;也是一种单片机外设芯片串行扩展接口&#xff0c;是一种高速、全双工…

学习笔记-JWT 保持登录状态

目录 一、解析 token 1. 在 JWT 工具类添加解析 token 的方法 2. 在 Controller 添加获取用户数据的方法 二、获取用户信息 1. 发起 axios 请求用户信息 2. 在路由守卫中调用方法 3. 使用 三、token 时效性 1. 设置 token 过期时间 2. 判断 token 是否过期 3. 在拦截…

Golang是如何实现动态数组功能的?Slice切片原理解析

Hi 亲爱的朋友们&#xff0c;我是 k 哥。今天&#xff0c;咱们聊一聊Golang 切片。 当我们需要使用数组&#xff0c;但是又不能提前定义数组大小时&#xff0c;可以使用golang的动态数组结构&#xff0c;slice切片。在 Go 语言的众多特性里&#xff0c;slice 是我们经常用到的数…

基于MSER和HOG特征提取的SVM交通标志检测和识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 MSER 4.2 HOG特征提取 4.3 SVM 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2017b 3.部分核心程序 &#xff08;完整版代码包含中…

黑马头条vue2.0项目实战(四)——首页—文章列表

目录 1. 头部导航栏 1.1 页面布局 1.2 样式调整中遇到的问题 2. 频道列表 2.1 页面布局 2.2 样式调整 2.3 展示频道列表 3. 文章列表 3.1 思路分析 3.2 使用 List 列表组件 3.3 加载文章列表数据 3.4 下拉刷新 3.5 设置上下padding固定头部和频道列表 3.6 记住列…

48天笔试训练错题——day40

目录 选择题 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 编程题 1. 发邮件 2. 最长上升子序列 选择题 1. DNS 劫持又称域名劫持&#xff0c;是指在劫持的网络范围内拦截域名解析的请求&#xff0c;分析请求的域名&#xff0c;把审查范围以外的请求放行&#xff0c;否则返回…

大数据Flink(一百零七):阿里云Flink的应用场景

文章目录 阿里云Flink的应用场景 一、​​​​​​​背景信息 二、​​​​​​​​​​​​​​部门场景 三、​​​​​​​​​​​​​​技术领域 1、​​​​​​​​​​​​​​实时ETL和数据流 2、​​​​​​​​​​​​​​实时数据分析 3、​​​​​​​事…

8.3总结

1.改进渲染 这个渲染为了美观我做了很久花了好多时间&#xff0c;&#xff0c;&#xff0c; // 加载头像图像InputStream inputStream new ByteArrayInputStream(message.getFileBytes());Image image new Image(inputStream); // 第二个参数表示是否缓存图片&#xff0c;根…

达梦数据库dsc集群动态添加节点

前提条件&#xff1a;在安装好的的dsc集群&#xff1a;达梦数据库dsc集群保姆级部署文档_达梦数据库文档-CSDN博客上动态添加节点 1、环境信息 扩展节点信息&#xff1a; 操作环境&#xff1a;VMware Workstation 16 Pro dmdsc集群 机器ip 主机名 操作系统 资源配置 实…

mac中dyld[5999]: Library not loaded: libssl.3.dylib解决方法

需要重新安装下openssl3.0版本 brew reinstall openssl3.0 安装后执行还是报错&#xff0c;需要找到openssl的安装路径 /opt/homebrew/Cellar/openssl3.0/3.0.14/lib/ 将libssl.3.dylib和libcrypto.3.dylib拷贝到自己的二进制文件同目录下&#xff0c;再执行二进制文件就可…

YUM软件包管理工具:更改YUM源、配置本地YUM仓库

文章目录 YUM软件包管理工具更改YUM源配置过程网络出错&#xff0c;配置网卡 本地YUM仓库配置挂载配置本地yum源 YUM软件包管理工具 YUM&#xff08;Yellowdog Updater, Modified&#xff09;是一个在Linux系统中广泛使用的开源软件包管理工具&#xff0c;尤其常见于Fedora、R…

图论① dfs | Java | LeetCode 797,Kama 98 邻接表实现(未完成)

797 所有可能路径 https://leetcode.cn/problems/all-paths-from-source-to-target/description/ 输入&#xff1a;graph [[1,2],[3],[3],[]] 题目分析&#xff0c;这里 class Solution {//这个不是二维数组&#xff0c;而是listList<List<Integer>> res new Ar…

【Python系列】Python 字典合并

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【教学类-72-01】20240803建筑对称图纸01

背景需求 通义万相下载“对称建筑&#xff0c;简笔画” 我想把“对称建筑”做成对称的样式&#xff0c;类似《对称脸》 【教学类-36-12-01】20240302儿童对称正脸图&#xff08;一&#xff09;4图右脸4图左脸&#xff08;中班《幼儿园里朋友多》&#xff09;&#xff08;midj…

高等数学精解【4】

文章目录 平面方程直角坐标及基本运算 参考文献 平面方程 直角坐标及基本运算 向量的四则运算 下面由文心一言自动生成 向量的四则运算主要包括加法、减法、数乘&#xff08;标量乘法&#xff09;和数量积&#xff08;点积或内积&#xff09;&#xff0c;但通常不直接称为“除…

GuLi商城-商品服务-API-新增商品-获取分类关联的品牌

这个接口在上一篇文章中已经写过了&#xff0c;功能已经实现了&#xff0c;这里略

Vue3 核心模块源码解析

Vue3 核心模块源码解析 1、Vue3 模块源码解析1.1 compiler-core1.1.1 目录结构1.1.2 compile逻辑 1.2 reactivity1.2.1 目录结构1.2.2 reactivity逻辑 1.3 runtime-core1.3.1 目录结构1.3.2 runtime核心逻辑 1.4 runtime-dom1.4.1 主要功能 1.5 runtime-test1.5.1 目录结构1.5.…

深入理解接口测试:实用指南与最佳实践(一) 环境安装

​ ​ 您好&#xff0c;我是程序员小羊&#xff01; 前言 这一阶段是接口测试的学习&#xff0c;我们接下来的讲解都是使用Postman这款工具&#xff0c;当然呢Postman是现在一款非常流行的接口调试工具&#xff0c;它使用简单&#xff0c;而且功能也很强大。不仅测试人员会使用…