python爬虫当当书籍并可视化
时间: 2025-07-01 13:39:49 浏览: 16
### 使用Python实现当当网书籍数据爬取及可视化分析
#### 准备工作
为了顺利进行当当网书籍数据的爬取与可视化分析,需先安装必要的Python库。可以通过pip命令来安装所需的第三方包:
```bash
pip install requests lxml pandas matplotlib seaborn jieba wordcloud
```
#### 当当网书籍数据抓取
构建一个简单的网络爬虫用于获取指定关键词下的书籍详情页面链接列表,并从中解析出所需字段。
```python
import requests
from lxml import etree
def get_book_list(keyword, page_index=1):
url = f'http://search.dangdang.com/?key={keyword}&act=input&page_index={page_index}'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
}
response = requests.get(url=url, headers=headers)
tree = etree.HTML(response.text)
book_items = []
for item in tree.xpath('//ul[@class="bigimg"]/li'):
try:
title = ''.join(item.xpath('.//a/@title')).strip()
author = ''.join(item.xpath('.//span[@ddt-pit]/@title')).strip().split('/')[-2].strip()
price = float(''.join(item.xpath('.//p[@class="price"]/span[1]/text()')))
pub_date = ''.join(item.xpath('.//span[@ddt-pit]/@title')).strip().split('/')[-1].strip()
press = ''.join(item.xpath('.//a[@name="P_cbs"]/text()'))
book_item = {'title': title,
'author': author,
'price': price,
'pub_date': pub_date,
'press': press}
book_items.append(book_item)
except Exception as e:
print(f'Error occurred while parsing {item}:', str(e))
return book_items
```
此函数`get_book_list()`接收两个参数:搜索关键字和页码索引,默认从首页开始;返回的是包含多个字典对象的列表,每个字典代表一本书籍的相关属性[^2]。
#### 数据预处理
由于实际应用中可能会遇到各种异常情况,因此建议对收集来的原始数据进一步清理过滤后再作下一步操作。这里简单举例说明如何去除重复项以及缺失值填充等问题。
```python
import pandas as pd
df_books = pd.DataFrame(get_book_list('编程'))
# 去重
df_unique = df_books.drop_duplicates(subset=['title'])
# 缺失值处理
df_cleaned = df_unique.fillna({'author':'未知','press':'未提供'})
```
上述代码片段展示了怎样基于Pandas框架快速完成基础的数据清洗任务,确保最终得到干净整齐的数据集供后续探索性数据分析使用[^3]。
#### 可视化呈现
最后一步就是选取合适的图表形式直观表达所关心的信息维度。比如绘制柱状图对比不同出版社发行量大小差异,或者词云展现热门话题分布状况等等。
```python
import matplotlib.pyplot as plt
import seaborn as sns
from collections import Counter
from wordcloud import WordCloud
import jieba
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 绘制价格直方图
sns.histplot(data=df_cleaned,x='price')
plt.title('图书定价区间统计')
plt.show()
# 构建出版社条形图
publisher_counts = df_cleaned.press.value_counts().head(10).sort_values(ascending=True)
sns.barplot(x=publisher_counts.values,y=publisher_counts.index)
plt.xlabel('数量')
plt.ylabel('出版社名称')
plt.title('Top10活跃度最高的出版社')
plt.show()
# 制作文本摘要词频统计
words = " ".join(df_cleaned.title.tolist())
cut_text = " ".join(jieba.cut(words))
word_freqs = dict(Counter(cut_text.split()).most_common())
wc = WordCloud(width=800,height=400,max_words=200,colormap='rainbow').generate_from_frequencies(word_freqs)
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.title('热门户籍主题词云')
plt.show()
```
以上脚本实现了三种不同类型图形——直方图、条形图和词云图,分别用来描述数值型特征(如售价)、类别变量(像出版社)还有文本内容本身的特点。这样不仅能够帮助理解整体结构特点,而且有助于发现潜在规律或模式[^4]。
阅读全文
相关推荐


















