当前位置: 首页 > news >正文

爬虫实战案例

预计更新
一、 爬虫技术概述
1.1 什么是爬虫技术
1.2 爬虫技术的应用领域
1.3 爬虫技术的工作原理

二、 网络协议和HTTP协议
2.1 网络协议概述
2.2 HTTP协议介绍
2.3 HTTP请求和响应

三、 Python基础
3.1 Python语言概述
3.2 Python的基本数据类型
3.3 Python的流程控制语句
3.4 Python的函数和模块
3.5 Python的面向对象编程

四、 爬虫工具介绍
4.1 Requests库
4.2 BeautifulSoup库
4.3 Scrapy框架

五、 数据存储和处理
5.1 数据存储格式介绍
5.2 数据库介绍
5.3 数据处理和分析

六、 动态网页爬取
6.1 动态网页概述
6.2 Selenium工具介绍
6.3 PhantomJS工具介绍

七、 反爬虫技术
7.1 反爬虫技术概述
7.2 User-Agent伪装
7.3 IP代理池

八、 数据清洗和预处理
8.1 数据清洗和去重
8.2 数据预处理和分析

九、 分布式爬虫和高并发
9.1 分布式爬虫概述
9.2 分布式爬虫框架介绍
9.3 高并发爬虫实现

十、 爬虫实战
10.1 爬取豆瓣电影排行榜
10.2 爬取天气数据
10.3 爬取新闻网站数据

十、	爬虫实战
10.1 爬取豆瓣电影排行榜
10.2 爬取天气数据
10.3 爬取新闻网站数据
爬取豆瓣电影排行榜

以下将讲解详细的爬虫实战教程,包括爬取豆瓣电影排行榜、数据分析、数据处理和数据可视化等方面。

  1. 确定目标和分析目标网页

首先,我们需要确定我们的目标是爬取豆瓣电影排行榜的数据。豆瓣电影排行榜是一个非常有用的资源,可以帮助我们了解当前最热门的电影和电影的评分信息。我们的爬虫目标是从豆瓣电影排行榜页面上爬取电影的名称、评分、评价人数、导演、主演、电影类型、上映日期等信息。

接下来,我们需要分析目标网页的 HTML 结构和 CSS 样式,找出需要爬取的数据所在的标签和类名。我们可以使用 Chrome 浏览器的开发者工具进行分析。打开豆瓣电影排行榜页面,按下 F12 键打开开发者工具,选择 Elements 标签,可以看到页面的 HTML 结构和 CSS 样式。通过分析,我们可以发现电影的名称、评分、评价人数、导演、主演、电影类型、上映日期等信息分别位于页面的以下标签中:

  • 电影名称:div[class=“pl2”] > a
  • 电影评分:div[class=“star clearfix”] > span[class=“rating_nums”]
  • 电影评价人数:div[class=“star clearfix”] > span[class=“pl”]
  • 电影导演和主演:div[class=“pl2”] > p
  • 电影类型和上映日期:div[class=“pl2”] > p
  1. 构建爬虫程序

在分析目标网页的结构和数据之后,我们需要构建爬虫程序。爬虫程序的主要任务是下载目标网页,并从网页中提取需要的数据。在 Python 中,我们可以使用 Requests 库进行网页的下载,使用 Beautiful Soup 库进行网页解析。

以下是一个完整的爬虫程序的代码示例:

import requests
from bs4 import BeautifulSoup
import time
import randomdef get_movie_info(movie_url):response = requests.get(movie_url)soup = BeautifulSoup(response.text, 'html.parser')title = soup.select('h1 > span')[0].textrating = soup.select('strong[class="ll rating_num"]')[0].textvotes = soup.select('span[property="v:votes"]')[0].textdirector = soup.select('a[rel="v:directedBy"]')[0].textactors = [actor.text for actor in soup.select('a[rel="v:starring"]')]genre = [genre.text for genre in soup.select('span[property="v:genre"]')]date = soup.select('span[property="v:initialReleaseDate"]')[0].textreturn {'title': title, 'rating': rating, 'votes': votes, 'director': director, 'actors': actors, 'genre': genre, 'date': date}def get_movies_info(start, end):for i in range(start, end, 20):url = f'https://movie.douban.com/chart?start={i}&type=D'response = requests.get(url)soup = BeautifulSoup(response.text, 'html.parser')for movie in soup.select('.pl2'):movie_url = movie.select('a')[0]['href']movie_info = get_movie_info(movie_url)print(movie_info)time.sleep(random.randint(1,5))if __name__ == '__main__':get_movies_info(0, 100)

该程序分为两个函数:get_movie_info() 和 get_movies_info()。get_movie_info() 函数用于从电影详情页面中提取电影的名称、评分、评价人数、导演、主演、电影类型、上映日期等信息,并将这些信息存储在一个字典中返回。get_movies_info() 函数用于爬取豆瓣电影排行榜页面,并调用 get_movie_info() 函数获取每部电影的详细信息。

get_movies_info() 函数的参数 start 和 end 分别表示要爬取的电影排行榜的起始位置和结束位置。我们可以通过循环遍历每个页面,获取每个页面中的电影信息。在获取每部电影的详细信息时,我们还需要使用 time 和 random 模块设置随机的延迟时间,以避免被网站的反爬虫机制检测出来。

  1. 数据存储和处理

当我们成功地爬取了豆瓣电影排行榜的数据后,我们需要将这些数据存储到数据库或文件中,以便进行后续的数据分析和处理。在这里,我们将使用 MongoDB 数据库进行数据存储。

在 Python 中,我们可以使用 pymongo 库连接 MongoDB 数据库,并将数据存储到数据库中。以下是一个存储数据到 MongoDB 数据库的代码示例:

import pymongo
from pymongo import MongoClientclient = MongoClient('mongodb://localhost:27017/')
db = client['douban_movie']
collection = db['movie_info']def save_to_mongo(movie_info):collection.insert_one(movie_info)

在上面的代码中,我们首先使用 MongoClient 类连接 MongoDB 数据库,然后选择要使用的数据库和集合。在 get_movie_info() 函数中,我们将每部电影的详细信息存储在一个字典中,并调用 save_to_mongo() 函数将数据存储到 MongoDB 数据库中。

除了存储数据到数据库中,我们还可以将数据保存到文件中。在 Python 中,我们可以使用 pandas 库将数据保存为 CSV 或 Excel 格式的文件。以下是一个将数据保存到 CSV 文件的代码示例:

import pandas as pddef save_to_csv(movie_info):df = pd.DataFrame(movie_info)df.to_csv('douban_movie.csv', mode='a', encoding='utf-8', index=False, header=False)

在上面的代码中,我们首先将每部电影的详细信息存储在一个字典中,并调用 save_to_csv() 函数将数据保存到 CSV 文件中。在 save_to_csv() 函数中,我们将字典转换成 DataFrame 对象,并调用 to_csv() 方法保存为 CSV 格式的文件。

  1. 数据分析和可视化

在成功地爬取了豆瓣电影排行榜的数据并将数据存储到数据库或文件中后,我们可以进行后续的数据分析和可视化。在这里,我们将使用 pandas 和 matplotlib 库进行数据分析和可视化。

以下是一个统计豆瓣电影排行榜中不同类型电影数量的代码示例:

import pymongo
from pymongo import MongoClient
import pandas as pd
import matplotlib.pyplot as pltclient = MongoClient('mongodb://localhost:27017/')
db = client['douban_movie']
collection = db['movie_info']def get_movies_data():movies_data = []for movie in collection.find():movies_data.append(movie)return movies_datadef plot_genre_count():movies_data = get_movies_data()genres = []for movie in movies_data:genres.extend(movie['genre'])genres_count = pd.Series(genres).value_counts()genres_count.plot(kind='bar')plt.title('Genres Count in Top 100 Movies')plt.xlabel('Genres')plt.ylabel('Count')plt.show()if __name__ == '__main__':plot_genre_count()

在上面的代码中,我们首先使用 get_movies_data() 函数从 MongoDB 数据库中获取所有电影的数据,并将这些数据存储在一个列表中。然后,我们使用 pandas 库将 genres 列表转换成一个 Series 对象,并使用 value_counts() 方法统计不同类型电影的数量。最后,我们使用 matplotlib 库绘制一个柱状图来可视化不同类型电影的数量。

除了统计不同类型电影的数量外,我们还可以进行其他的数据分析和可视化,比如统计不同导演或演员的电影数量、分析电影评分的分布、探索电影时长和上映年份等等。在进行数据分析和可视化时,我们可以根据具体的问题和需求选择合适的方法和工具。

以下是一个统计豆瓣电影排行榜中不同国家/地区电影数量的代码示例:

import pymongo
from pymongo import MongoClient
import pandas as pd
import matplotlib.pyplot as pltclient = MongoClient('mongodb://localhost:27017/')
db = client['douban_movie']
collection = db['movie_info']def get_movies_data():movies_data = []for movie in collection.find():movies_data.append(movie)return movies_datadef plot_country_count():movies_data = get_movies_data()countries = []for movie in movies_data:countries.extend(movie['country'])countries_count = pd.Series(countries).value_counts()countries_count.plot(kind='bar')plt.title('Countries Count in Top 100 Movies')plt.xlabel('Countries')plt.ylabel('Count')plt.show()if __name__ == '__main__':plot_country_count()

在上面的代码中,我们首先使用 get_movies_data() 函数从 MongoDB 数据库中获取所有电影的数据,并将这些数据存储在一个列表中。然后,我们使用 pandas 库将 countries 列表转换成一个 Series 对象,并使用 value_counts() 方法统计不同国家/地区电影的数量。最后,我们使用 matplotlib 库绘制一个柱状图来可视化不同国家/地区电影的数量。

总结

本文介绍了如何使用 Python 爬取豆瓣电影排行榜的数据,并将数据存储到 MongoDB 数据库或文件中,以及如何使用 pandas 和 matplotlib 库进行数据分析和可视化。Python 爬虫是一种强大的工具,可以帮助我们快速获取大量的数据,并进行后续的数据分析和处理。在进行爬虫时,我们需要遵守网站的规则和协议,以避免对网站造成不必要的负担和影响。同时,我们还需要注意数据的隐私和安全,避免泄露敏感信息或被恶意利用。

爬取天气数据

本文将介绍如何使用 Python 爬虫爬取天气数据,并使用 pandas 和 matplotlib 库进行数据分析和可视化。本文的目标是爬取某个城市一段时间内的天气数据,并通过数据分析和可视化来了解该城市的气候特点和变化趋势。本文将按照以下步骤进行:

  1. 网站分析和数据获取
  2. 数据清洗和整理
  3. 数据分析和可视化

在开始之前,我们需要安装一些必要的 Python 库,包括 requests, beautifulsoup4, pandas 和 matplotlib。可以使用 pip 命令进行安装。

  1. 网站分析和数据获取

在进行爬虫之前,我们需要了解要爬取的网站的结构和数据获取的方法。在这里,我们将使用中国天气网(http://www.weather.com.cn/)爬取天气数据。中国天气网提供了全国各地的天气预报和历史天气数据,我们可以根据城市和日期来获取相应的天气数据。

首先,我们需要确定要爬取的城市和日期范围。在这里,我们选择爬取北京市 2020 年 1 月至 6 月的天气数据。在浏览器中打开中国天气网的北京市天气页面(http://www.weather.com.cn/weather/101010100.shtml),可以看到该页面包含了当前天气预报、未来几天的天气预报以及历史天气数据等信息。我们需要爬取的是历史天气数据,该数据位于页面底部的“历史天气查询”部分。

点击“历史天气查询”链接,可以打开历史天气查询页面(http://www.weather.com.cn/weather/101010100.shtml#dt=20190101),该页面包含了北京市 2019 年 1 月 1 日至当前日期的历史天气数据。我们可以通过修改 URL 中的日期参数来获取不同日期范围内的天气数据。

在这里,我们将使用 requests 和 beautifulsoup4 库来获取和解析网页。以下是获取北京市 2020 年 1 月至 6 月的天气数据的代码示例:

import requests
from bs4 import BeautifulSoup
import re
import pandas as pd# 定义要爬取的城市和日期范围
city = '101010100'  # 北京市的城市代码
start_date = '20200101'  # 开始日期
end_date = '20200630'  # 结束日期# 定义请求的 URL
url = f'http://www.weather.com.cn/weather/{city}.shtml#dt={start_date}'# 发送 HTTP 请求并获取响应内容
response = requests.get(url)# 使用 BeautifulSoup 解析响应内容
soup = BeautifulSoup(response.text, 'html.parser')# 获取天气数据表格
table = soup.find('table', class_='table_day')# 遍历表格中的行并提取数据
data = []
for tr in table.find_all('tr')[1:]:tds = tr.find_all('td')date = tds[0].text.strip()temperature = tds[1].text.strip()weather = tds[2].text.strip()wind_direction = tds[3].text.strip()wind_speed = tds[4].text.strip()quality = tds[5].text.strip()data.append([date, temperature, weather, wind_direction, wind_speed, quality])# 将数据转换成 DataFrame 对象
df = pd.DataFrame(data, columns=['date', 'temperature', 'weather', 'wind_direction', 'wind_speed', 'quality'])# 打印数据
print(df.head())

在上面的代码中,我们首先定义了要爬取的城市和日期范围,并将其作为参数构造了请求的 URL。然后,我们使用 requests 库发送 HTTP 请求,并获取响应内容。接下来,我们使用 beautifulsoup4 库解析响应内容,并使用 find() 方法获取天气数据表格。在表格中,每一行对应一天的天气数据,我们遍历表格中的行并提取日期、温度、天气、风向、风速和空气质量等数据。最后,我们将数据转换成 DataFrame 对象,并打印出前几行数据。

  1. 数据清洗和整理

在获取天气数据之后,我们需要对数据进行清洗和整理,以便后续的数据分析和可视化。具体来说,我们需要做以下几个步骤:

  1. 将日期转换成日期类型,并设置为索引;
  2. 将温度、风速和空气质量等数据转换成数值类型;
  3. 去除重复的数据;
  4. 处理缺失数据;
  5. 添加一些新的特征,如月份、季节等。

以下是对天气数据进行清洗和整理的代码示例:

# 将日期转换成日期类型,并设置为索引
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)# 将温度、风速和空气质量等数据转换成数值类型
df['temperature'] = df['temperature'].str.extract('(\d+)', expand=False).astype(int)
df['wind_speed'] = df['wind_speed'].str.extract('(\d+)', expand=False).astype(int)
df['quality'] = df['quality'].str.extract('(\d+)', expand=False).astype(int)# 去除重复的数据
df.drop_duplicates(inplace=True)# 处理缺失数据
df.fillna(method='ffill', inplace=True)# 添加新的特征
df['month'] = df.index.month
df['season'] = (df.index.month % 12 + 3) // 3

在上面的代码中,我们首先将日期列转换成日期类型,并将其设置为 DataFrame 的索引。然后,我们使用 str.extract() 方法从温度、风速和空气质量等列中提取数值,并将其转换成数值类型。接下来,我们使用 drop_duplicates() 方法去除重复的数据,并使用 fillna() 方法处理缺失数据(在这里,我们使用前向填充的方式)。最后,我们添加了新的特征,包括月份和季节。

  1. 数据分析和可视化

在清洗和整理完数据之后,我们可以开始进行数据分析和可视化了。我们将使用 pandas 和 matplotlib 库来完成这些任务。具体来说,我们将分析天气数据的统计特征和变化趋势,并通过图表来展示这些结果。

首先,我们可以使用 describe() 方法来查看天气数据的统计特征,包括平均温度、最高温度、最低温度等。以下是查看天气数据统计特征的代码示例:

# 查看天气数据的统计特征
print(df.describe())

接着,我们可以使用 groupby() 方法对天气数据按月份和季节进行分组,并计算每组的平均值。以下是按月份和季节分组并计算平均值的代码示例:

# 按月份和季节分组并计算平均值
by_month = df.groupby('month').mean()
by_season = df.groupby('season').mean()

然后,我们可以使用 matplotlib 库来绘制各种图表,如折线图、柱状图、散点图等。以下是绘制折线图和柱状图的代码示例:

import matplotlib.pyplot as plt# 绘制折线图
plt.plot(by_month['temperature'])
plt.xlabel('Month')
plt.ylabel('Temperature')
plt.title('Temperature by Month')
plt.show()# 绘制柱状图
plt.bar(['Spring', 'Summer', 'Fall', 'Winter'], by_season['temperature'])
plt.xlabel('Season')
plt.ylabel('Temperature')
plt.title(' Temperature by Season')
plt.show()

在上面的代码中,我们首先导入了 matplotlib 库,并使用 plot() 方法绘制了按月份分组的平均温度的折线图。然后,我们使用 bar() 方法绘制了按季节分组的平均温度的柱状图。

除了折线图和柱状图之外,我们还可以使用散点图、箱线图、热力图等图表来展示天气数据的变化趋势和相关性。以下是绘制散点图和箱线图的代码示例:

# 绘制散点图
plt.scatter(df['wind_speed'], df['quality'])
plt.xlabel('Wind Speed')
plt.ylabel('Air Quality')
plt.title('Wind Speed vs Air Quality')
plt.show()# 绘制箱线图
df.boxplot(column='temperature', by='season')
plt.xlabel('Season')
plt.ylabel('Temperature')
plt.title('Temperature by Season')
plt.show()

在上面的代码中,我们使用 scatter() 方法绘制了风速和空气质量之间的散点图,并使用 boxplot() 方法绘制了按季节分组的温度的箱线图。

通过上述数据分析和可视化的过程,我们可以更加深入地了解天气数据的统计特征和变化趋势,为后续的天气预测和决策提供参考。

爬取新闻网站数据

本篇文章将介绍如何使用 Python 爬虫从新闻网站上获取数据,并进行数据的清洗、分析和可视化。我们将以中国新闻网为例,演示如何从该网站上获取新闻标题、发布时间、链接和正文等数据,并使用 pandas 和 matplotlib 库对数据进行清洗、分析和可视化。

一、准备工作

在开始爬取新闻网站数据之前,我们需要做一些准备工作:

  1. 安装 Python 和相关库

为了使用 Python 爬虫,我们需要先安装 Python 和相关库。具体来说,我们需要安装 requests、beautifulsoup4 和 pandas 库。可以使用 pip 命令来安装这些库,例如:

pip install requests
pip install beautifulsoup4
pip install pandas
  1. 确定爬取目标

在开始爬取新闻网站数据之前,我们需要确定爬取的目标。在本篇文章中,我们选择中国新闻网作为爬取目标,爬取该网站上的新闻标题、发布时间、链接和正文等数据。

  1. 分析网页结构

在开始编写爬虫代码之前,我们需要分析网页的结构,以便确定需要爬取的数据在哪些 HTML 标签中。在本篇文章中,我们将使用 Chrome 浏览器的开发者工具来分析网页结构。

二、爬取新闻网站数据

在完成准备工作之后,我们可以开始编写爬虫代码来爬取新闻网站数据了。以下是爬虫代码的详细步骤:

  1. 发送 HTTP 请求

我们首先需要向网站发送 HTTP 请求,以获取网页的 HTML 代码。可以使用 requests 库来发送 HTTP 请求,例如:

import requestsurl = 'http://www.chinanews.com/'
response = requests.get(url)
html = response.text

在上面的代码中,我们首先定义了要爬取的网站的 URL,然后使用 requests 库的 get() 方法发送 HTTP GET 请求,并将响应的 HTML 代码保存在 html 变量中。

  1. 解析 HTML 代码

接下来,我们需要使用 beautifulsoup4 库来解析 HTML 代码,并提取需要的数据。可以使用 BeautifulSoup 类来解析 HTML 代码,例如:

from bs4 import BeautifulSoupsoup = BeautifulSoup(html, 'html.parser')

在上面的代码中,我们使用 BeautifulSoup 类来解析 HTML 代码,并将解析器指定为 html.parser。

  1. 提取新闻链接

我们可以使用 find_all() 方法来查找 HTML 标签,并提取其中的链接。在本篇文章中,我们需要提取首页上所有新闻的链接。可以使用以下代码来提取链接:

links = []
for a in soup.find_all('a'):href = a.get('href')if href and href.startswith('http://www.chinanews.com/'):links.append(href)

在上面的代码中,我们首先定义了一个空列表 links 用于存储所有新闻的链接。然后,我们使用 find_all() 方法查找所有的 a 标签,并使用 get() 方法获取标签的 href 属性。如果链接以 http://www.chinanews.com/ 开头,则将其添加到 links 列表中。

  1. 爬取新闻内容

有了新闻的链接,我们就可以进一步爬取新闻的标题、发布时间和正文等内容了。可以使用以下代码来爬取新闻内容:

import renews_list = []
for link in links:response = requests.get(link)html = response.textsoup = BeautifulSoup(html, 'html.parser')title = soup.find('h1').text.strip()pub_time = soup.find('div', class_='left-t').text.strip()content = soup.find('div', class_='left_zw').text.strip()content = re.sub(r'\s+', '\n', content)news_list.append({'title': title, 'pub_time': pub_time, 'content': content})

在上面的代码中,我们首先定义了一个空列表 news_list 用于存储所有新闻的标题、发布时间和正文等内容。然后,我们遍历所有新闻的链接,并使用 requests 库发送 HTTP GET 请求。然后,我们使用 BeautifulSoup 类来解析 HTML 代码,并查找标题、发布时间和正文等内容。其中,标题和发布时间分别在 h1 标签和 class 为 left-t 的 div 标签中,正文在 class 为 left_zw 的 div 标签中。最后,我们使用正则表达式将正文中的空格、制表符等空白字符替换为换行符,以便后续的数据清洗。

  1. 存储新闻数据

有了爬取到的新闻数据,我们可以将其存储到文件或数据库中,以便后续的数据清洗、分析和可视化。在本篇文章中,我们选择将数据存储到 CSV 文件中。可以使用 pandas 库来创建并写入 CSV 文件,例如:

import pandas as pddf = pd.DataFrame(news_list)
df.to_csv('news.csv', index=False)

在上面的代码中,我们首先使用 pandas 库的 DataFrame 类创建数据框,并将新闻数据存储到数据框中。然后,我们使用 to_csv() 方法将数据框写入 CSV 文件中。

三、数据清洗、分析和可视化

在完成数据爬取之后,我们需要对数据进行清洗、分析和可视化,以便更好地理解和利用数据。以下是数据清洗、分析和可视化的详细步骤:

  1. 数据清洗

在进行数据分析和可视化之前,我们需要对数据进行清洗,以去除重复值、缺失值和异常值等问题。可以使用 pandas 库来进行数据清洗,例如:

import pandas as pddf = pd.read_csv('news.csv')
df.drop_duplicates(subset=['title'], keep='first', inplace=True)
df.dropna(inplace=True)

在上面的代码中,我们首先使用 pandas 库的 read_csv() 方法从 CSV 文件中读取数据框。然后,我们使用 drop_duplicates() 方法去除标题重复的新闻,使用 dropna() 方法去除缺失值。

  1. 数据分析

有了干净的数据,我们可以使用 pandas 库来进行数据分析,以了解新闻的分布、发布时间和关键词等信息。以下是数据分析的示例代码:

import pandas as pd
import matplotlib.pyplot as pltdf = pd.read_csv('news_cleaned.csv')# 统计新闻来源
source_counts = df['source'].value_counts()
plt.pie(source_counts, labels=source_counts.index)
plt.title('Source Distribution')
plt.show()# 统计新闻发布时间
df['pub_time'] = pd.to_datetime(df['pub_time'])
df['year'] = df['pub_time'].dt.year
df['month'] = df['pub_time'].dt.month
df['day'] = df['pub_time'].dt.day
month_counts = df['month'].value_counts().sort_index()
plt.plot(month_counts.index, month_counts.values)
plt.title('Monthly News Count')
plt.xlabel('Month')
plt.ylabel('Count')
plt.show()# 分析新闻关键词
from jieba import cut
from collections import Counterkeywords = []
for content in df['content']:words = cut(content)keywords.extend(words)
counter = Counter(keywords)
top_keywords = counter.most_common(20)
x = [w[0] for w in top_keywords]
y = [w[1] for w in top_keywords]
plt.bar(x, y)
plt.title('Top 20 Keywords')
plt.xlabel('Keyword')
plt.ylabel('Count')
plt.xticks(rotation=90)
plt.show()

在上面的代码中,我们首先使用 pandas 库的 read_csv() 方法从 CSV 文件中读取数据框。然后,我们分别分析了新闻来源、发布时间和关键词等信息。

对于新闻来源,我们使用 value_counts() 方法统计了各个来源的新闻数量,并使用饼图进行了可视化。

对于新闻发布时间,我们首先使用 to_datetime() 方法将发布时间转换为 pandas 的时间格式,并提取出年份、月份和日期等信息。然后,我们使用 value_counts() 方法统计了每个月份的新闻数量,并使用折线图进行了可视化。

对于新闻关键词,我们使用 jieba 库对新闻正文进行了分词,并使用 Counter 类统计了每个关键词出现的次数。然后,我们选取了出现次数最多的前 20 个关键词,并使用柱状图进行了可视化。

  1. 数据可视化

数据可视化是数据分析的重要环节,可以帮助我们更直观地理解和展示数据。在本篇文章中,我们使用了 matplotlib 库和 pandas 库的可视化功能来展示新闻数据的分布、趋势和关键词等信息。以下是数据可视化的示例代码:

import pandas as pd
import matplotlib.pyplot as pltdf = pd.read_csv('news_cleaned.csv')# 统计新闻来源
source_counts = df['source'].value_counts()
plt.pie(source_counts, labels=source_counts.index)
plt.title('Source Distribution')
plt.show()# 统计新闻发布时间
df['pub_time'] = pd.to_datetime(df['pub_time'])
df['year'] = df['pub_time'].dt.year
df['month'] = df['pub_time'].dt.month
df['day'] = df['pub_time'].dt.day
month_counts = df['month'].value_counts().sort_index()
plt.plot(month_counts.index, month_counts.values)
plt.title('Monthly News Count')
plt.xlabel('Month')
plt.ylabel('Count')
plt.show()# 分析新闻关键词
from jieba import cut
from collections import Counterkeywords = []
for content in df['content']:words = cut(content)keywords.extend(words)
counter = Counter(keywords)
top_keywords = counter.most_common(20)
x = [w[0] for w in top_keywords]
y = [w[1] for w in top_keywords]
plt.bar(x, y)
plt.title('Top 20 Keywords')
plt.xlabel('Keyword')
plt.ylabel('Count')
plt.xticks(rotation=90)
plt.show()

在上面的代码中,我们使用了 matplotlib 库和 pandas 库的可视化功能来展示新闻数据的分布、趋势和关键词等信息。具体地,我们使用了饼图、折线图和柱状图等图表来展示不同方面的数据信息。同时,我们也可以根据需要使用其他库如 seaborn 来进行更复杂的数据可视化。

四、总结

本篇文章介绍了使用 Python 技术爬取、清洗、分析和可视化新闻数据的详细步骤。通过这个示例,我们可以了解到如何使用 requests、BeautifulSoup、pandas、matplotlib 等常用库来实现数据处理和可视化。同时,我们也可以根据需要对代码进行修改和扩展,以满足不同的数据处理和分析需求。

相关文章:

爬虫实战案例

预计更新 一、 爬虫技术概述 1.1 什么是爬虫技术 1.2 爬虫技术的应用领域 1.3 爬虫技术的工作原理 二、 网络协议和HTTP协议 2.1 网络协议概述 2.2 HTTP协议介绍 2.3 HTTP请求和响应 三、 Python基础 3.1 Python语言概述 3.2 Python的基本数据类型 3.3 Python的流程控制语句 …...

ConcurrentLinkedQueue非阻塞无界链表队列

ConcurrentLinkedQueue非阻塞无界链表队列 ConcurrentLinkedQueue是一个线程安全的队列,基于链表结构实现,是一个无界队列,理论上来说队列的长度可以无限扩大。 与其他队列相同,ConcurrentLinkedQueue 也采用的是先进先出&#…...

排序算法稳定性

稳定性: 用一句话总结排序算法的稳定性就是:同样的值,在排完序之后改不改变相对次序。 举例:arr[] {3,2,1,2,1,3},数组中共有1、2 、3各2个数,排完序之后arr1[] {1,1,2,2,3,3}。稳定性是指排完序之后&…...

统计学期末复习整理

统计学:描述统计学和推断统计学。计量尺度:定类尺度、定序尺度、定距尺度、定比尺度。 描述统计中的测度: 1.数据分布的集中趋势 2.数据分布的离散程度 3.数据分布的形状。 离散系数 也称为标准差系数,通常是用一组数据的标准差与…...

Sketch在线版免费使用,Windows也能用的Sketch!

Sketch 的最大缺点是它对 Windows/PC 用户不友好。它是一款 Mac 工具,无法在浏览器中运行。此外,使用 Sketch 需要安装其他插件才能获得更多响应式设计工具。然而,现在有了 Sketch 网页版工具即时设计替代即时设计! 即时设计几乎…...

详解uni-app项目运行在安卓真机调试

详解uni-app项目运行在安卓真机调试 uni-app项目运行在安卓真机调试 文章目录 详解uni-app项目运行在安卓真机调试前言为什么要用真机调试?真机调试操作步骤总结 前言 UNI-APP学习系列之详解uni-app项目运行在安卓真机调试 为什么要用真机调试? 因为安…...

体积小、无广告、超实用的5款小工具

大家好,我又来啦,今天给大家带来的5款软件,共同特点都是体积小、无广告、超实用,大家观看完可以自行搜索下载哦。 1.动态桌面——WinDynamicDesktop WinDynamicDesktop是一款用于根据时间和地点自动更换桌面壁纸的工具。它可以让…...

OZON好出单吗?新手如何做?注意事项是什么?

最近OZON的势头确实很猛,东哥后台也收到了很多关于OZON的咨询,很多想尝试跨境电商的新手卖家都对这个平台跃跃欲试,其中问最多的就是,“OZON好出单吗?”“新手做OZON需要注意什么?避开哪些坑?”…...

性能测试需求分析有哪些?怎么做?

目录 性能测试必要性评估 常见性能测试关键评估项如下: 性能测试工具选型 性能测试需求分析 性能测试需求评审 性能测试需求分析与传统的功能测试需求有所不同,功能测试需求分析重点在于从用户层面分析被测对象的功能性、易用性等质量特性&#xff…...

STM32F103RCT6 -- 基于FreeRTOS 的USART1 串口通讯

1. 在STM32F103RCT6 单片机上跑FreeRTOS 实时操作系统,使用串口USART1 通讯,发送 – 接收数据,实现上位机与下位机的通信 使用 FreeRTOS 提供的队列(Queue)机制来实现数据的接收和发送 2. USART1 配置: …...

区间预测 | MATLAB实现基于QRCNN-LSTM-Multihead-Attention多头注意力卷积长短期记忆神经网络多变量时间序列区间预测

区间预测 | MATLAB实现基于QRCNN-LSTM-Multihead-Attention多头注意力卷积长短期记忆神经网络多变量时间序列区间预测 目录 区间预测 | MATLAB实现基于QRCNN-LSTM-Multihead-Attention多头注意力卷积长短期记忆神经网络多变量时间序列区间预测效果一览基本介绍模型描述程序设计…...

递归--打印一个字符串的全部排列(java)

打印一个字符串的全部排列 打印一个字符串的全部排列解题思路打印一个字符串的全部排列,要求不要出现重复的排列递归专题 打印一个字符串的全部排列 自负串全排序: 举例: abc 的全排序是: abc acb bac bca cba cab 解题思路 因为每个字符都要选,其实就是选择每个字符…...

【001 设备驱动】主设备号和次设备号的用途

一、请简述主设备号和次设备号的用途 Linux 中每个设备都有一个设备号,设备号由主设备号和次设备号两部分组成,主设备号表示某一个具体的驱动,次设备号表示使用这个驱动的各个设备。 Linux 提供了一个名为 dev_t 的数据类型表示设备号&…...

移动端PDF在线预览

苹果手机可以直接在线预览PDF文件,而安卓手机不行,必须得下载(如图),所以需要解决一下 1.准备所需js文件 (1)js下载地址https://mozilla.github.io/pdf.js/ (2)下载步骤 ①:打开网址后&#x…...

虚拟机两次寻址

一次寻址: 虚拟、逻辑地址:CS(段选择子) eip(段内偏移)> 线性地址 : 32位或64位 通过页表> 物理地址 x86: 页面大小4k pte4个字节 10-10-12 (不管是x86 x86PAE x64下页内偏…...

DRF之JWT认证

一、JWT认证 在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证。我们不再使用Session认证机制,而使用Json Web Token(本质就是token)认证机制。 Json web token (JWT), 是为了在网络应用环…...

华为OD机试真题 Java 实现【放苹果】【2022Q4 100分】

一、题目描述 把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法? 注意:如果有7个苹果和3个盘子,(5,1,1)和(1,5,1)被视为是同一种分法。 数据范围:0≤m≤10 ,1≤n≤10 。 二、输入描述 输入两个int整数。 三、输出描述 输…...

拼多多继续ALL IN

2023年注定是中国电商不平凡的一年。 随着网购用户数量见顶,经济形势进入新常态,电商平台已经来到了短兵相接的肉搏战阶段。 此刻的618大促,硝烟弥漫,刀光剑影,电商“决战”似乎是迫在眉睫。对各个平台来说&#xff0c…...

Unity的IPostprocessBuildWithReport:深入解析与实用案例

Unity IPostprocessBuildWithReport Unity IPostprocessBuildWithReport是Unity引擎中的一个非常有用的功能,它可以让开发者在构建项目后自动执行一些操作,并且可以获取构建报告。这个功能可以帮助开发提高工作效率,减少手动操作的时间和错误…...

九、Spring Cloud—gateway网关

一、引言 每个微服务都需和前端进行通信,解决每个微服务请求时的鉴权、限流、权限校验、跨域等逻辑,放在一个统一的地方进行使用。 在微服务架构中,网关是一个重要的组件,它作为系统的入口,负责接收所有的客户端请求…...

ARM微架构与程序编写

目录 1.流水线 2.指令流水线 3. 多核处理器​编辑 4. 工程搭建 4.1为Keil软件配置编译工具链 5.程序编写 5.1 数据处理指令 5.2 带标志位的加法ADC ADDS 5.3 跳转指令B\BL 5.4 单寄存器内存访问 5.5 批量寄存器内存访问 5.6 栈的应用->叶子函数的调用过程 5.…...

Windows下利用Anaconda创建多个CUDA环境

参考 https://blog.csdn.net/qq_42395917/article/details/126237388 https://blog.csdn.net/qq_42406643/article/details/109545766 (待学习补充) https://blog.csdn.net/qq_43919533/article/details/125694437 (待学习补充) 安装cudatoolkit和cudnn # 前提是我已经安装了…...

C SS复习笔记

1.img标签 img的src属性是图片显示不出来时显示的文字 ing的title属性是光标放到图片上,提示的文字 2.a标签 a标签的target属性表示打开窗口的方式,默认的值是_self表示当前窗口的打开页面,_blank表示新窗口打开页面。 a标签的href链接分…...

LeetCode 225 用队列实现栈

题目: 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回…...

Java对象的共享

要编写正确的并发程序,关键问题在于:在访问共享的可变状态时需要进行正确的管理。第2章介绍了如何通过同步来避免多个线程在同一时刻访问相同的数据,而本章将介绍如何共享和发布对象,从而使它们能够安全地由多个线程同时访问。这两…...

漏洞概述-0day漏洞利用原理(0)

0day专题对作者来说是一个很大的挑战,但无论有多难,作者会坚持进行大量的对新旧技术(精通二进制、汇编语言、操作系统底层的知识)实践并尽可能做到完善,最终利用技术发扬正能量。 bug 与漏洞 随着现代软件工业的发展,软件规模不断扩大,软件内部的逻辑也变得异常复杂。为…...

交换机的4种网络结构方式:级联方式、堆叠方式、端口聚合方式、分层方式

交换机是计算机网络中重要的网络设备之一,用于实现局域网(LAN)内部的数据转发和通信。交换机可以采用不同的网络结构方式来满足不同的网络需求和拓扑结构。本文将详细介绍交换机的四种网络结构方式:级联方式、堆叠方式、端口聚合方…...

firewall-cmd防火墙策略

--permanent 永久生效,重启后规则不消失 不执行 firewall-cmd --reload 命令配置不生效 添加单个IP为白名单 firewall-cmd --permanent --zonepublic -add-rich-rulerule family"ipv4" source address"IP" accept 删除白名单 firewall-cmd --…...

解决SQLException: Incorrect string value异常

java开发中会遇到如下异常: org.apache.ibatis.exceptions.PersistenceException: ### Error updating database. Cause: java.sql.SQLException: Incorrect string value: \xF0\x9F\x95\xB32:... for column baseInfo at row 1 ### The error may involve com.f…...

桂院校园导航 导入 与 配置教程

将 静态项目/云开发项目 文件夹下最新版本的 文件夹下的 项目 的整个文件夹 复制到项目路径下(比如 D:\WeChatProjects),强烈建议不要直接扔在桌面上 云开发项目 需开通 云开发 功能(首月免费,次月19.9)&am…...