Python 制作糗事百科爬虫实例

下面就来详细讲解一下“Python 制作糗事百科爬虫实例”的完整攻略:

1. 爬虫概述

爬虫(Web Crawler)是指互联网上按照一定规则自动抓取网页信息的程序。其核心功能是自动抓取网页,将需要的有用信息提取出来并进行分析处理。

2. 工具准备

  • Python 3.x(开发语言)
  • requests(网络请求库)
  • BeautifulSoup(HTML 解析器)
  • pyecharts(数据可视化库)

3. 实现过程

3.1 数据抓取

首先,我们需要抓取糗事百科的页面数据。以热门段子为例,糗事百科的热门段子页面 URL 是:http://www.qiushibaike.com/hot/page/1/

import requests
from bs4 import BeautifulSoup

url = 'http://www.qiushibaike.com/hot/page/1/'
# 伪装成浏览器
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
response.encoding = 'utf-8'
content = response.text

soup = BeautifulSoup(content, 'html.parser')
articles = soup.find_all('div', class_='article block untagged mb15')

3.2 数据提取

从 HTML 中提取出有用的信息,比如段子内容、作者、好笑度、评论数等等。

for article in articles:
    # 段子内容
    content = article.find('div', {'class': 'content'}).get_text(strip=True)
    # 作者
    author = article.find('span', {'class': 'sage'}).get_text(strip=True)
    # 好笑度
    stats = article.find('div', {'class': 'stats'})
    vote = stats.find_all('span')[0].get_text(strip=True)
    comment = stats.find_all('span')[1].get_text(strip=True)
    # 打印结果
    print('作者:', author)
    print('好笑度:', vote)
    print('评论数:', comment)
    print('段子内容:', content)
    print('='*60)

3.3 数据分析

将提取出来的数据进行分析处理,比如统计每个作者发的段子数量及对应的好笑度、评论数等等。

# 统计每个作者发的段子数量及对应的好笑度,评论数
data = {}
for article in articles:
    author = article.find('span', {'class': 'sage'}).get_text(strip=True)
    stats = article.find('div', {'class': 'stats'})
    vote = int(stats.find_all('span')[0].get_text(strip=True))
    comment = int(stats.find_all('span')[1].get_text(strip=True))
    if author not in data:
        data[author] = {'vote':vote, 'comment':comment, 'count':1}
    else:
        data[author]['vote'] += vote
        data[author]['comment'] += comment
        data[author]['count'] += 1

3.4 数据可视化

使用 pyecharts 进行数据可视化。

from pyecharts.charts import Bar
from pyecharts import options as opts

# 定义好笑度、评论数、段子数量三个列表
votes = []
comments = []
counts = []
# 从 data 字典中读取每个作者的数据,填充到对应的列表中
for author, info in data.items():
    votes.append(info['vote'])
    comments.append(info['comment'])
    counts.append(info['count'])

# 分别绘制好笑度、评论数和段子数量三个柱状图
bar1 = (
    Bar()
    .add_xaxis(list(data.keys()))
    .add_yaxis('好笑度', votes)
    .set_global_opts(title_opts=opts.TitleOpts(title='段子吐槽大赏-好笑度'),
                     xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=30)),
                     yaxis_opts=opts.AxisOpts(name=''))
)
bar2 = (
    Bar()
    .add_xaxis(list(data.keys()))
    .add_yaxis('评论数', comments)
    .set_global_opts(title_opts=opts.TitleOpts(title='段子吐槽大赏-评论数'),
                     xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=30)),
                     yaxis_opts=opts.AxisOpts(name=''))
)
bar3 = (
    Bar()
    .add_xaxis(list(data.keys()))
    .add_yaxis('段子数量', counts)
    .set_global_opts(title_opts=opts.TitleOpts(title='段子吐槽大赏-段子数量'),
                     xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=30)),
                     yaxis_opts=opts.AxisOpts(name=''))
)

# 将三个柱状图组合在一起
bar = bar1.overlap(bar2).overlap(bar3)
# 渲染生成 HTML 文件,可在浏览器中查看
bar.render('qiushibaike.html')

其中,我们使用了 pyecharts 的 Bar() 函数,设置了横轴、纵轴和标题等各种参数,最终将三个柱状图组合在一起,生成了一个 HTML 文件,可以在浏览器中查看。

4. 示例说明

示例一

以抓取糗事百科为例,讲解了爬虫的基本实现过程,包括数据抓取、数据提取和数据分析等。通过使用 requests 和 BeautifulSoup 等库,实现了热门段子页面的数据抓取和提取。同时,通过使用 pyecharts 进行数据可视化,制作了好笑度、评论数和段子数量的柱状图,并将三个图形组合在一起,生成了一个 HTML 文件。

示例二

使用 Python 编写的爬虫程序可以不仅仅是抓取糗事百科的数据,还可以抓取其他网站的数据。比如抓取新浪选股页面的数据。

import requests
from bs4 import BeautifulSoup

url = 'http://money.finance.sina.com.cn/q/view/newFLJK.php?param=fund'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
response.encoding = 'utf-8'
content = response.text

soup = BeautifulSoup(content, 'html.parser')
tables = soup.find_all('table', class_='table_list')
for table in tables:
    # 表头
    ths = table.find_all('th')
    for th in ths:
        print(th.get_text(strip=True), end='\t')
    print()
    # 表格内容
    trs = table.find_all('tr')[1:]
    for tr in trs:
        tds = tr.find_all('td')
        for td in tds:
            print(td.get_text(strip=True), end='\t')
        print()

以上程序实现了抓取新浪选股页面的数据,并将数据输出到控制台。

5. 总结

以上实例说明了如何使用 Python 编写爬虫程序,并进行数据抓取、数据分析和数据可视化等操作。在实现爬虫的过程中,需要借助各种 Python 库,比如 requests、BeautifulSoup 和 pyecharts 等,可以极大地提高代码编写的效率和爬虫程序的运行速度。但是,在抓取网站数据时,需要注意遵守相关法律法规,不得侵犯他人的隐私权和知识产权,以及不得用于违法犯罪活动。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 制作糗事百科爬虫实例 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • python程序调用远程服务的步骤详解

    关于Python程序调用远程服务的步骤,我们可以分为以下几个步骤: 确认服务提供商提供的API文档 安装所需的Python包 编写Python程序调用远程服务 测试代码是否成功 现在,让我们一步一步来说明这些步骤: 1. 确认服务提供商提供的API文档 在调用远程服务前,我们需要确认服务提供商所提供的API文档。其中,API文档一般包括服务的URL、参数说明…

    python 2023年6月3日
    00
  • python读取csv和txt数据转换成向量的实例

    下面是关于“python读取csv和txt数据转换成向量的实例”的详细攻略。 目录 准备工作 读取csv文件并转换成向量 读取txt文件并转换成向量 示例说明1:将CSV文件转换成向量并进行聚类分析 示例说明2:将TXT文件转换成向量并进行词嵌入 1. 准备工作 要完成“python读取csv和txt数据转换成向量”的实例操作,需要先准备好以下工具和包: P…

    python 2023年6月3日
    00
  • python超详细实现完整学生成绩管理系统

    Python超详细实现完整学生成绩管理系统 系统概述 本系统是一个基于Python的学生成绩管理系统,能够方便地记录学生的基本信息,并可以录入和查询学生的各科成绩情况。该系统主要包括三个模块,分别是学生信息管理模块、成绩录入模块和成绩查询模块。具体实现依赖于Python基础知识和面向对象编程的概念。 功能模块介绍 学生信息管理模块 学生基本信息录入; 学生基…

    python 2023年5月19日
    00
  • Python中GeoJson和bokeh-1的使用讲解

    Python中GeoJson和Bokeh-1的使用涉及到数据可视化和地图可视化。下面将详细介绍这两个工具的使用方法。 GeoJson 简介 GeoJson是一种用于描述地图上的时态和矢量数据的开放格式标准。它基于JavaScript对象表示法标准(JSON)创建。它提供了一种将空间数据与属性数据结合在一起的简单方法。在Python中,我们可以使用GeoPan…

    python 2023年6月3日
    00
  • 简单了解Java Netty Reactor三种线程模型

    下面是关于”简单了解Java Netty Reactor三种线程模型”的攻略: 1. Java Netty Reactor三种线程模型 1.1 传统IO模型 传统的IO模型采用”one connection, one thread”的架构,也就是说每个连接都需要一个独立的线程来处理它的读写事件。 这种方式的缺点在于系统线程的创建和销毁会带来很大的开销,而这种…

    python 2023年6月6日
    00
  • python 正则表达式的使用

    Python正则表达式的使用攻略 正则表达式是一种强大的文本处理工具,可以用于匹配、查找、替换和割字符串。Python提供了re模块来处理正则表达式,本文将为您详细解Python正则表达式的语法、re模块的常用方法和两个示例说明。 正则表达式的语法 在正则表达式中,使用[]表示字符集,^表示取反,-表示范围,+表示匹配一个或多个字符,*表示匹配零个或多个字符…

    python 2023年5月14日
    00
  • Python线程协作threading.Condition实现过程解析

    Python线程协作threading.Condition实现过程解析 在Python多线程编程中,线程之间的协作是非常重要的一部分,它可以实现线程之间的同步和互斥。Python提供了threading.Condition类来实现线程之间的协作,本文将详细讲解Python线程协作threading.Condition实现过程,包括Condition的概念、方…

    python 2023年5月15日
    00
  • Linux下文件名、文件和mp3名字、pdf的乱码问题

    针对“Linux下文件名、文件和mp3名字、pdf的乱码问题”,我将给出以下完整攻略: 问题描述 在Linux系统中,有时会遇到文件名、文件内容或者mp3、pdf等文件的中文名字出现乱码的情况,这会给用户带来不便。下面将介绍如何处理这类问题。 解决方案 一、Linux文件名与文件内容出现乱码的处理 首先,确定你的系统的字符集,使用命令locale观察系统当前…

    python 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部