爬取晋江文学城霸王票排行榜的作者、书名、作品积分,导出为csv文件、数据库文件和数据可视化
时间: 2025-02-05 19:26:03 浏览: 80
### 数据爬取与处理
为了实现从晋江文学城网站上抓取霸王票排行榜的数据(包括作者、书名、作品积分),可以采用 Python 的 `requests` 和 `BeautifulSoup` 库来执行网页请求和解析 HTML 文档。对于数据存储部分,可利用 Pandas 将其保存为 CSV 文件,并借助 SQLAlchemy 进行 MySQL 数据库的操作[^1]。
#### 抓取网页内容
首先安装必要的包:
```bash
pip install requests beautifulsoup4 pandas sqlalchemy mysqlclient openpyxl matplotlib seaborn
```
编写脚本如下所示:
```python
import requests
from bs4 import BeautifulSoup
import pandas as pd
from sqlalchemy import create_engine
url = 'https://www.jjwxc.net/top.php?gotopage=1&orderField=ticketcount&type=top25&pageType=billboard'
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
}
response = requests.get(url, headers=headers)
html_content = response.text
soup = BeautifulSoup(html_content, 'lxml')
data = []
table_body = soup.find('tbody')
rows = table_body.find_all('tr')[1:] # 排除表头行
for row in rows:
cols = row.find_all('td')
book_info = {'author': cols[1].text.strip(),
'book_name': cols[2].a['title'],
'score': int(cols[-1].text.replace(',', ''))}
data.append(book_info)
df = pd.DataFrame(data)
print(df.head())
```
此段代码实现了对目标页面的访问及表格内所需信息提取,并将其转换成 DataFrame 对象以便后续操作。
#### 存储到CSV文件
将上述获得的数据框对象写入本地磁盘上的 CSV 文件非常简单:
```python
output_csv_path = './top_books.csv'
df.to_csv(output_csv_path, index=False, encoding='utf_8_sig') # 使用 utf_8_sig 编码防止中文乱码问题
```
这段命令会创建一个新的名为 top_books.csv 的文件,在其中包含了所有被抓取的信息条目。
#### 同步至MySQL数据库
要使这些数据能够被高效检索并支持更复杂的查询需求,则需进一步导入关系型数据库管理系统中。这里选择了 MySQL 来作为例子说明具体做法:
```python
db_url = 'mysql+pymysql://username:password@localhost/database_name' # 替换成自己的连接字符串
engine = create_engine(db_url)
with engine.connect() as connection:
df.to_sql(name='books_ranking', con=connection,
if_exists='replace', index=False) # 如果存在同名表则替换之
```
以上步骤完成了向指定位置上传整个数据集的过程;需要注意的是实际部署时应妥善保管好敏感参数以免泄露风险。
#### 实现数据可视化
最后一步是对已有的结构化资料做直观展示分析工作。Matplotlib 及 Seaborn 是两个非常适合用来制作图表工具箱之一:
```python
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(10, 7))
sns.barplot(x="score", y="book_name", hue="author",
palette="viridis", dodge=False, data=df.sort_values(by=['score'], ascending=False).head(10))
plt.title('Top 10 Books by Score on JJWXC')
plt.xlabel('Score')
plt.ylabel('Book Name & Author')
plt.tight_layout()
plt.show()
```
该绘图函数选取了得分最高的前十本书籍及其对应的创作者姓名绘制柱状统计图,使得读者一眼就能看出哪些是最受欢迎的作品。
阅读全文
相关推荐
















