Python 制作糗事百科爬虫实例

yizhihongxing

下面就来详细讲解一下“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 IO编程

    详解Python IO编程 什么是IO编程? IO编程全称Input/Output编程,是指程序对磁盘、网络等输入输出设备的编程。 Python中的文件操作 在Python中,我们可以通过以下方式打开文件: file_obj = open(file_name, mode=’r’, encoding=None) 其中,file_name是传入的文件路径,mod…

    python 2023年5月20日
    00
  • Python使用BeautifulSoup4修改网页内容的实战记录

    BeautifulSoup是一个Python库,用于解析HTML和XML文档,并提供了一些方便的方法来获取和操作文档中的元素。本文将详细讲解如何使用BeautifulSoup库修改网页内容,包括两个示例。 示例一:修改单个元素 以下是一个示例代码,演示如何使用BeautifulSoup修改单个元素: from bs4 import BeautifulSoup…

    python 2023年5月15日
    00
  • Python中的datetime包与time包包和模块详情

    接下来我将详细讲解Python中的datetime包与time包的包和模块详情。 datetime模块 datetime模块提供了许多用于处理日期和时间的类和函数。它与time模块关联密切,但是它更加灵活,支持处理不同的日期/时间格式。下面是一些常用的类和函数: datetime.datetime 类 – 表示日期和时间的类 下面是创建一个 datetime…

    python 2023年6月2日
    00
  • 如果按钮名称是在 python 的 for 循环中创建的,我如何访问它?

    【问题标题】:How can I access a button name if it was created in a for loop in python?如果按钮名称是在 python 的 for 循环中创建的,我如何访问它? 【发布时间】:2023-04-02 07:27:01 【问题描述】: 我目前正在尝试创建一个与 .txt 文件中的行交互的 G…

    Python开发 2023年4月8日
    00
  • 详解python中的index函数用法

    下面为你详细介绍一下“详解python中的index函数用法”。 什么是index函数 index()函数是字符串中用来查找子串位置的方法。 它会在字符串中查找给定的子串,并返回它所在位置的索引。如果子串不存在,则会抛出 ValueError 异常。 index函数的语法 index() 函数语法如下: str.index(sub[, start[, end…

    python 2023年6月5日
    00
  • 如何使用Python进行人工智能开发?

    当谈到人工智能开发时,Python是一种非常流行的编程语言。以下是使用Python进行人工智能开发的完整攻略: 确定你的需求和目标 首先,你需要明确你的需求和目标,知道你希望做什么、如何做以及需要哪些技能。如果你正在处理传感器数据,则需要一些基本的信号处理技能,如果你正在处理计算机视觉,则需要了解图像处理和识别技术。 学习Python编程语言 Python是…

    python 2023年4月19日
    00
  • python 自动化办公之批量修改文件名实操

    我会详细讲解“Python 自动化办公之批量修改文件名实操”的攻略。 概述 本文主要介绍如何使用 Python 实现批量修改文件名的功能,以提升办公效率和减少人为操作带来的错误。方法主要利用了 Python 中的 os、shutil 和 re 等库,对于大量的文件,可以一次性实现重命名。 具体步骤 1. 搜寻目标文件夹下的所有文件 首先需要以 Python …

    python 2023年6月5日
    00
  • 在Python中对多维数组中的点x进行Legendre级数评估

    在Python中对多维数组中的点x进行Legendre级数评估的完整攻略如下: Step 1:导入必要的库 在Python中对多维数组中的点x进行Legendre级数评估,需要用到numpy库和scipy库,因此需要在代码开头导入这两个库。具体代码如下: import numpy as np from scipy.special import eval_le…

    python-answer 2023年3月25日
    00
合作推广
合作推广
分享本页
返回顶部