基于Python爬虫数据处理
本攻略介绍如何使用Python爬虫来获取数据,并使用Python进行数据处理和分析。
一、爬虫数据获取
Python中有很多爬虫库可供选择,本攻略使用的是requests
和BeautifulSoup
库。requests
用于获取网页源代码,而BeautifulSoup
则用于解析源代码,提取需要的数据。
以下是一个简单的示例代码,获取豆瓣电影排行榜前250的电影名称、评分和链接:
import requests
from bs4 import BeautifulSoup
url = 'https://movie.douban.com/top250'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
movies = []
for item in soup.select('.item'):
title = item.select_one('.title').text.strip()
rating = item.select_one('.rating_num').text.strip()
href = item.select_one('.hd a')['href']
movies.append({'title': title, 'rating': rating, 'href': href})
print(movies)
以上代码中,先使用requests
发起请求获取网页源代码,然后使用BeautifulSoup
对源代码进行解析,提取出前250部电影的名称、评分和链接。最后将获取到的电影信息以字典形式存入列表中,并打印输出。
二、数据处理
完成了数据的获取,接下来就是如何对数据进行处理和分析。Python中有很多数据处理库可供选择,本攻略使用的是pandas
库。pandas
是一个高效、强大、灵活的数据分析工具,可以使数据的清洗、处理和分析变得简单而快速。
以下是一个简单的示例代码,读取电影信息的列表数据,然后使用pandas
进行数据清洗和分析:
import pandas as pd
df = pd.DataFrame(movies)
df['rating'] = df['rating'].astype(float)
# 计算电影评分的平均值、中位数、最大值、最小值
mean_rating = df['rating'].mean()
median_rating = df['rating'].median()
max_rating = df['rating'].max()
min_rating = df['rating'].min()
# 根据评分排序,获取评分前20的电影的名称和评分
top_movies = df.sort_values(by='rating', ascending=False).head(20)
top_movies = top_movies[['title', 'rating']]
print(top_movies)
以上代码中,先将电影信息的列表数据转换为DataFrame
对象,然后将rating
列的数据类型转换为浮点数类型。接下来,使用pandas
的一些函数求出电影评分的平均值、中位数、最大值、最小值,并按照评分排序,获取评分前20的电影的名称和评分。
三、示例说明
以下是另外两个示例,分别是获取今日头条的新闻分类、标题和链接,以及统计豆瓣电影排行榜前250的电影的各个评分分别占比:
1. 获取今日头条的新闻分类、标题和链接
url = 'https://www.toutiao.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
news = []
for item in soup.select('.feed-tab-item'):
category = item.select_one('.title').text.strip()
title = item.select_one('.title-box .link').text.strip()
href = item.select_one('.title-box .link')['href']
news.append({'category': category, 'title': title, 'href': href})
print(news)
以上代码中,先使用requests
发起请求获取今日头条的网页源代码,然后使用BeautifulSoup
对源代码进行解析,提取出新闻分类、标题和链接。最后将获取到的新闻信息以字典形式存入列表中,并打印输出。
2. 统计豆瓣电影排行榜前250的电影的各个评分分别占比
import matplotlib.pyplot as plt
df = pd.DataFrame(movies)
df['rating'] = df['rating'].astype(float)
# 统计评分的分布情况
bins = [x/10 for x in range(1, 11)]
counts = df.groupby(pd.cut(df['rating'], bins)).size()
counts = counts/counts.sum()*100
# 绘制评分分布的饼图
plt.pie(counts, labels=counts.index.map(lambda x: '{}-{}'.format(x.left, x.right)), autopct='%.2f%%')
plt.show()
以上代码中,先将获取到的电影信息的列表数据转换为DataFrame
对象,并将rating
列的数据类型转换为浮点数类型。接下来,使用pandas
的groupby
函数按照评分区间进行分组,统计各个评分区间的电影数量,并计算各个评分区间的电影数量占总数的比例。最后,使用matplotlib
绘制评分分布的饼图。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于python爬虫数据处理(详解) - Python技术站