爬虫实战-Python爬取百度当天热搜内容

简介: 爬虫实战-Python爬取百度当天热搜内容

学习建议

  • 本文仅用于学习使用,不做他用;
  • 本文仅获取页面的内容,作为学习和对Python知识的了解,不会对页面或原始数据造成压力;
  • 请规范文明使用本文内容,请仅作为个人学习参考使用。
  • 本文主要学习了Python爬虫的基础,及常用的几个模块或库的使用,比如BeautifulSoup、request等。

学习目标

  • 获取百度当天的热搜内容,并打印出来;
  • 内容需要包含热搜的标题、热搜简介、以及热搜的指数。

预期内容

  • 输入网址打开百度首页;
  • 进入首页后,点击【百度热搜】,如图:

请在此添加图片描述

  • 进入热搜首页后,点击【热搜】,即当前页面就是我们需要的数据:

请在此添加图片描述

  • 从下图可以看出,一条热搜的内容包含了热搜标题、该热搜的简介,以及热搜的指数,那么这三项内容就是我们最终要的内容:

请在此添加图片描述

目标分解

热搜地址

  • 进入到热搜主界面后,我们查看当前页面的URL,后续需要用到:

https://top.baidu.com/board?tab=realtime

请在此添加图片描述

热搜标题

  • 进入到热搜主页后,我们打开浏览器的F12调试模式;
  • 然后查看这条热搜标题对应的界面的源码;

请在此添加图片描述

  • 通过查看我们看出前两个热搜标题的源码为:
绿我涓滴 会它千顷澄碧

英媒称有人目击凯特现身
  • 从以上可以看出,有一个共同属性是class,剩下的就是标题内容不一样;
  • 通过分析我们用正则表达式来统一识别所有的热搜标题:
(.*?)

热搜简介

  • 使用以上同样的方法,我们可以看到前两条热搜的简介如下:

请在此添加图片描述

如今兰考发生了翻天覆地的变化,张庄村的老百姓把XX走过的一条路改名为“幸福路”,沿着“幸福路”奔向越来越好的日子...

17日,广东深圳一女子在山顶为打卡拍照徒手攀爬时不慎手滑险些落山。当地办事处表示雨天路滑不建议攀爬,正常山道是有人看管的...
  • 同样可以使用正则表达式表示下:

(.*)<a

热搜指数

  • 使用同样方法我们获取到热搜指数的正则表达式为:

div class="hot-index_1Bl1a">(.*?)

小总结

  • 通过以上分析,我们就得到了我们需要重点几个变量:

URL:url = https://top.baidu.com/board?tab=realtime
热搜标题: title = re.compile(r'

(.*?)
')
热搜简介:introduction = re.compile(r'
(.*)(.*?)
')

代码实现

根据以上分析,我们整理下思路:

  • 我们创建一个类TestHotsearch()来组织需要进行的操作;
  • 在类初始化中,把URL、热搜标题、热搜简介、热搜指数四个变量初始化;
  • 创建方法test_html_content()获取热搜页面的html内容;
  • 创建方法test_get_content()获取需要的重点信息;
  • 类实例化后调用对应的方法。

详细代码如下:

from bs4 import BeautifulSoup
import re
import urllib.request, urllib.error


class TestHotsearch():
    def __init__(self):
        # 热搜URL
        self.url = 'https://top.baidu.com/board?tab=realtime'
        # 热搜标题
        self.title = re.compile(r'<div class="c-single-text-ellipsis">(.*?)</div>')
        # 热搜简介
        self.introduction = re.compile(r'<div class="hot-desc_1m_jR small_Uvkd3 ellipsis_DupbZ">(.*)<a')
        # 热搜指数
        self.index = re.compile(r'<div class="hot-index_1Bl1a">(.*?)</div>')
        # 所有热搜条目
        self.all_content = "category-wrap_iQLoo horizontal_1eKyQ"


    def test_html_content(self):
        """
        获取热搜页面的html内容
        :return:
        """
        header = {
   
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
        }
        request = urllib.request.Request(self.url, headers = header)
        html_content = ""
        try:
            response = urllib.request.urlopen(request)
            html_content = response.read().decode("utf-8")
        except urllib.error.URLError as e:
            if hasattr(e, "code"):
                print(e.code)
            if hasattr(e, "reason"):
                print(e.reason)
        return html_content.encode('gbk', 'ignore').decode('gbk')

    def test_get_content(self):
        """
        获取需要的重点信息
        :return:
        """
        # 获取html内容
        html = self.test_html_content()
        # 定义一个空列表保存要获取的信息
        data_info = []
        content = BeautifulSoup(html, "html.parser")
        for name in content.find_all('div', class_=self.all_content):
            data = []
            name_str = str(name)
            title = re.findall(self.title, name_str)
            data.append(title)
            introduction = re.findall(self.introduction, name_str)
            data.append(introduction)
            index = re.findall(self.index, name_str)
            data.append(index)
            data_info.append(data)
        return data_info


if __name__ == "__main__":
    hot_search = TestHotsearch()
    get_content = hot_search.test_get_content()
    print(f"获取到信息如下:{get_content}")
  • 部分输出内容如下:

获取到信息如下:[[[' 心系这门“关键课程” '], [], [' 4932922 ']], [[' 三只羊就梅菜扣肉事件致歉 '], [], [' 4991528 ']], [[' 女子山顶徒手攀爬石头手滑摔下 '], [], [' 4816630 ']], [[' 春分将至农事忙 '], [], [' 4790902 ']],.........

总结

Python主要是简单的爬虫实战,步骤清晰,容易理解和入门。建议最好用自己本地环境测试,仅供学习参考,请勿做其他用途。重点是学习Python正则表达式的应用,python的BeautifulSoup、request模块的使用等。

目录
相关文章
|
2天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
21 6
|
2天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
66 44
|
1天前
|
数据采集 JSON 测试技术
Python爬虫神器requests库的使用
在现代编程中,网络请求是必不可少的部分。本文详细介绍 Python 的 requests 库,一个功能强大且易用的 HTTP 请求库。内容涵盖安装、基本功能(如发送 GET 和 POST 请求、设置请求头、处理响应)、高级功能(如会话管理和文件上传)以及实际应用场景。通过本文,你将全面掌握 requests 库的使用方法。🚀🌟
15 7
|
3天前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
19 4
|
2天前
|
数据采集 Web App开发 iOS开发
如何利用 Python 的爬虫技术获取淘宝天猫商品的价格信息?
本文介绍了使用 Python 爬虫技术获取淘宝天猫商品价格信息的两种方法。方法一使用 Selenium 模拟浏览器操作,通过定位页面元素获取价格;方法二使用 Requests 和正则表达式直接请求页面内容并提取价格。每种方法都有详细步骤和代码示例,但需注意反爬措施和法律法规。
|
3天前
|
数据采集 存储 Web App开发
利用Python 的爬虫技术淘宝天猫销量和库存
使用 Python 爬虫技术获取淘宝天猫商品销量和库存的步骤包括:1. 安装 Python 和相关库(如 selenium、pandas),下载浏览器驱动;2. 使用 selenium 登录淘宝或天猫;3. 访问商品页面,分析网页结构,提取销量和库存信息;4. 处理和存储数据。注意网页结构可能变化,需遵守法律法规。
|
2天前
|
网络协议 调度 开发者
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第27天】本文介绍了Python网络编程中的Twisted框架,重点讲解了其异步IO处理机制。通过反应器模式,Twisted能够在单线程中高效处理多个网络连接。文章提供了两个实战示例:一个简单的Echo服务器和一个HTTP服务器,展示了Twisted的强大功能和灵活性。
6 0
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
157 4
|
3月前
|
数据采集 存储 搜索推荐
打造个性化网页爬虫:从零开始的Python教程
【8月更文挑战第31天】在数字信息的海洋中,网页爬虫是一艘能够自动搜集网络数据的神奇船只。本文将引导你启航,用Python语言建造属于你自己的网页爬虫。我们将一起探索如何从无到有,一步步构建一个能够抓取、解析并存储网页数据的基础爬虫。文章不仅分享代码,更带你理解背后的逻辑,让你能在遇到问题时自行找到解决方案。无论你是编程新手还是有一定基础的开发者,这篇文章都会为你打开一扇通往数据世界的新窗。
|
4月前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
【7月更文挑战第31天】在网络数据的海洋中,使用Python的`requests`库构建网络爬虫就像探索未知的航船。HTTP协议指导爬虫与服务器交流,收集信息。HTTP请求包括请求行、头和体,响应则含状态行、头和体。`requests`简化了发送各种HTTP请求的过程。
80 4