Python爬取当网书籍数据并数据可视化展示

本文将详细讲解如何使用Python爬虫爬取当网书籍数据并进行数据可视化展示的完整攻略,包括数据爬取、数据清洗、数据分析和数据可视化。我们将使用Python的requests、BeautifulSoup、pandas和matplotlib等库来实现这个任务。

爬取数据

首先,我们需要从当网上爬取书籍数据。我们可以使用Python的requests和BeautifulSoup库来实现这个任务。以下是一个简单的Python代码示例:

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = 'https://www.dangdang.com/cp01.00.00.00.00.00.html'

response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

books = soup.find_all('div', {'class': 'con'})

data = []
for book in books:
    title = book.find('a', {'class': 'pic'}).get('title')
    author = book.find('div', {'class': 'publisher_info'}).find_all('a')[0].text
    price = book.find('span', {'class': 'price_n'}).text
    data.append([title, author, price])

df = pd.DataFrame(data, columns=['Title', 'Author', 'Price'])
print(df.head())

在上面的示例中,我们首先定义了一个url变量,它指向当网的书籍页面。然后,我们使用requests库发送一个HTTP请求,并使用BeautifulSoup库解析HTML响应。我们使用find_all方法找到HTML中的所有书籍元素,并使用find方法找到每个书籍元素中的标题、作者和价格。最后,我们将这些数据保存到一个列表中,并使用pandas库的DataFrame方法将其转换为DataFrame对象。最后,我们打印DataFrame对象的前几行,以检查数据是否正确。

数据清洗

接下来,我们需要对爬取到的数据进行清洗。我们可以使用pandas库来实现这个任务。以下是一个简单的Python代码示例:

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = 'https://www.dangdang.com/cp01.00.00.00.00.00.html'

response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

books = soup.find_all('div', {'class': 'con'})

data = []
for book in books:
    title = book.find('a', {'class': 'pic'}).get('title')
    author = book.find('div', {'class': 'publisher_info'}).find_all('a')[0].text
    price = book.find('span', {'class': 'price_n'}).text
    data.append([title, author, price])

df = pd.DataFrame(data, columns=['Title', 'Author', 'Price'])

# 清洗价格数据
df['Price'] = df['Price'].str.replace('¥', '').astype(float)

print(df.head())

在上面的示例中,我们首先使用之前的代码爬取了数据,并将其转换为DataFrame对象。然后,我们使用str.replace方法将价格数据中的'¥'符号替换为空字符串,并使用astype方法将其转换为浮点数类型。最后,我们打印DataFrame对象的前几行,以检查数据是否正确。

数据分析

接下来,我们需要对清洗后的数据进行分析。我们可以使用pandas库来实现这个任务。以下是一个简单的Python代码示例:

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = 'https://www.dangdang.com/cp01.00.00.00.00.00.html'

response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

books = soup.find_all('div', {'class': 'con'})

data = []
for book in books:
    title = book.find('a', {'class': 'pic'}).get('title')
    author = book.find('div', {'class': 'publisher_info'}).find_all('a')[0].text
    price = book.find('span', {'class': 'price_n'}).text
    data.append([title, author, price])

df = pd.DataFrame(data, columns=['Title', 'Author', 'Price'])

# 清洗价格数据
df['Price'] = df['Price'].str.replace('¥', '').astype(float)

# 统计每个作者的书籍数量和平均价格
author_count = df.groupby('Author').agg({'Title': 'count', 'Price': 'mean'})
print(author_count)

# 统计每个价格区间的书籍数量
price_bins = [0, 20, 40, 60, 80, 100, 200, 500]
price_labels = ['0-20', '20-40', '40-60', '60-80', '80-100', '100-200', '200-500']
df['Price Range'] = pd.cut(df['Price'], bins=price_bins, labels=price_labels)
price_count = df.groupby('Price Range').agg({'Title': 'count'})
print(price_count)

在上面的示例中,我们首先使用之前的代码爬取了数据,并将其转换为DataFrame对象。然后,我们使用str.replace方法将价格数据中的'¥'符号替换为空字符串,并使用astype方法将其转换为浮点数类型。接着,我们使用groupby方法对作者进行分组,并使用agg方法统计每个作者的书籍数量和平均价格。最后,我们使用cut方法将价格数据分成不同的价格区间,并使用groupby方法统计每个价格区间的书籍数量。

数据可视化

最后,我们可以使用matplotlib库将数据可视化。以下是一个简单的Python代码示例:

import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt

url = 'https://www.dangdang.com/cp01.00.00.00.00.00.html'

response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

books = soup.find_all('div', {'class': 'con'})

data = []
for book in books:
    title = book.find('a', {'class': 'pic'}).get('title')
    author = book.find('div', {'class': 'publisher_info'}).find_all('a')[0].text
    price = book.find('span', {'class': 'price_n'}).text
    data.append([title, author, price])

df = pd.DataFrame(data, columns=['Title', 'Author', 'Price'])

# 清洗价格数据
df['Price'] = df['Price'].str.replace('¥', '').astype(float)

# 统计每个价格区间的书籍数量
price_bins = [0, 20, 40, 60, 80, 100, 200, 500]
price_labels = ['0-20', '20-40', '40-60', '60-80', '80-100', '100-200', '200-500']
df['Price Range'] = pd.cut(df['Price'], bins=price_bins, labels=price_labels)
price_count = df.groupby('Price Range').agg({'Title': 'count'})

# 绘制饼图
plt.pie(price_count['Title'], labels=price_count.index, autopct='%1.1f%%')
plt.title('Number of books by price range')
plt.show()

在上面的示例中,我们首先使用之前的代码爬取了数据,并将其转换为DataFrame对象。然后,我们使用str.replace方法将价格数据中的'¥'符号替换为空字符串,并使用astype方法将其转换为浮点数类型。接着,我们使用cut方法将价格数据分成不同的价格区间,并使用groupby方法统计每个价格区间的书籍数量。最后,我们使用matplotlib库的pie方法绘制了饼图,并使用title方法设置图表的标题。最后,我们使用show方法显示图表。

示例2:爬取多页数据并进行数据可视化

以下是一个爬取多页数据并进行数据可视化的Python代码示例:

import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt

url_template = 'https://search.dangdang.com/?key=python&act=input&page_index={}'

data = []
for page in range(1, 6):
    url = url_template.format(page)
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    books = soup.find_all('li', {'class': 'line'})

    for book in books:
        title = book.find('a', {'class': 'pic'}).get('title')
        author = book.find('div', {'class': 'publisher_info'}).find_all('a')[0].text
        price = book.find('span', {'class': 'price_n'}).text
        data.append([title, author, price])

df = pd.DataFrame(data, columns=['Title', 'Author', 'Price'])

# 清洗价格数据
df['Price'] = df['Price'].str.replace('¥', '').astype(float)

# 统计每个价格区间的书籍数量
price_bins = [0, 20, 40, 60, 80, 100, 200, 500]
price_labels = ['0-20', '20-40', '40-60', '60-80', '80-100', '100-200', '200-500']
df['Price Range'] = pd.cut(df['Price'], bins=price_bins, labels=price_labels)
price_count = df.groupby('Price Range').agg({'Title': 'count'})

# 绘制柱状图
plt.bar(price_count.index, price_count['Title'])
plt.title('Number of books by price range')
plt.xlabel('Price Range')
plt.ylabel('Number of books')
plt.show()

在上面的示例中,我们首先定义了一个url_template变量,它包含一个占位符{},用于指定页码。然后,我们使用循环遍历页码,并使用format方法将页码插入到url_template中。我们使用requests和BeautifulSoup库爬取每一页的数据,并将其转换为DataFrame对象。接着,我们使用cut方法将价格数据分成不同的价格区间,并使用groupby方法统计每个价格区间的书籍数量。最后,我们使用matplotlib库的bar方法绘制了柱状图,并使用title、xlabel和ylabel方法来设置图表的标题、x轴标签和y轴标签。最后,我们使用show方法显示图表。

总结

本文详细讲解了如何使用Python爬虫爬取当网书籍数据并进行数据可视化展示的完整攻略,包括数据爬取、数据清洗、数据分析和数据可视化。我们提供了两个示例,以便更好地理解这些方法的使用。在实际应用中,我们可以根据需要选择适合自己的方法,以便更好地爬取数据并进行数据可视化展示。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬取当网书籍数据并数据可视化展示 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • python mysql中in参数化说明

    当我们使用Python中的MySQL数据库操作时,有时需要传入多个参数,此时我们可以使用in语句来替代多个And或Or语句,提高代码的可读性。但如果使用字符串拼接的方式传参会增加SQL注入的风险,因此需要使用参数化查询。 下面就是一个Python MySQL中in参数化的完整攻略。 准备工作 首先需要安装Python中的MySQL库,可以使用命令pip in…

    python 2023年5月13日
    00
  • python3利用pathlib替代os.path的方法实例

    下面为您详细讲解“python3利用pathlib替代os.path的方法实例”的完整攻略。 前言 在Python3中,os.path模块在文件路径处理的时候非常常用,但是其存在字符串拼接、字符串操作等比较麻烦的问题。为了解决这些问题,Python3推出了pathlib模块。pathlib模块是Python3.4新增的标准库,其提供了安全、简洁的替代os.p…

    python 2023年6月2日
    00
  • Python open读写文件实现脚本

    当你需要在Python中读取或写入文件时,你需要学会如何使用Python的内置open函数以及一些基本的读写操作。下面是使用Python open读写文件实现脚本的完整攻略: 打开文件 使用Python打开一个文件是通过open函数实现的。open函数的基本语法如下: f = open(filename, mode) 其中,filename是你想要打开的文件…

    python 2023年6月5日
    00
  • python基于itchat实现微信群消息同步机器人

    Python基于itchat实现微信群消息同步机器人 介绍 本文将详细讲解如何使用Python基于itchat库实现微信群消息同步机器人。通过该机器人,可以实现多个微信群之间的消息同步。当一条消息在一个微信群中发送时,机器人将自动将该消息同步到其他指定的微信群中。同时,机器人还支持对关键词进行过滤,只同步包含指定关键词的消息。 准备工作 安装itchat库 …

    python 2023年5月23日
    00
  • 基于python详解PyScript到底是什么

    基于 Python 详解 PyScript 到底是什么 PyScript 是一个基于 Python 的代码生成工具,旨在帮助 Python 开发者更方便地生成大量重复代码。 安装和使用 PyScript PyScript 可以通过 pip 安装: pip install pyscript 安装完成后,我们可以在 Python 中使用 PyScript 模块。…

    python 2023年5月20日
    00
  • 详解如何在Python中用Pillow将两个图像的连接

    在Python中使用Pillow库可以很方便地对图像进行处理,将两张图片连接起来也是一件非常简单的任务。下面通过例子来讲解如何使用Pillow库将两张图片连接起来。 示例一:横向连接两张图片 我们可以将两张图片横向拼接起来,创建一个新的图片。使用Pillow库实现该功能的步骤如下: 首先,我们需要安装Pillow库。可以使用以下命令来安装Pillow库: p…

    python-answer 2023年3月25日
    00
  • Python用二分法求平方根的案例

    下面是详细的Python用二分法求平方根的攻略。 算法思路 选择一个左端点 left 和一个右端点 right(可以是任意两个正数,满足 left * left < num < right * right),并计算它们的中点 mid = (left + right) / 2。 如果 mid * mid == num,则 mid 就是 num 的平…

    python 2023年6月3日
    00
  • Python 可迭代对象 iterable的具体使用

    针对 Python 可迭代对象 iterable 的具体使用,我为您整理了以下完整攻略: 1. 什么是可迭代对象 iterable 可迭代对象 iterable 是指能够提供一个迭代器 iterator 的对象,迭代器是一个带有 next() 方法并且返回一个迭代值的对象。通常,可迭代对象 iterable 包括 list、set、tuple、dict、st…

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