爬虫实战案例

预计更新
一、 爬虫技术概述
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 random

def get_movie_info(movie_url):
    response = requests.get(movie_url)
    soup = BeautifulSoup(response.text, 'html.parser')
    title = soup.select('h1 > span')[0].text
    rating = soup.select('strong[class="ll rating_num"]')[0].text
    votes = soup.select('span[property="v:votes"]')[0].text
    director = soup.select('a[rel="v:directedBy"]')[0].text
    actors = [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].text

    return {'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 MongoClient

client = 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 pd

def 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 plt

client = 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_data

def 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 plt

client = 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_data

def 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 requests

url = '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 BeautifulSoup

soup = 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 re

news_list = []
for link in links:
    response = requests.get(link)
    html = response.text
    soup = 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 pd

df = pd.DataFrame(news_list)
df.to_csv('news.csv', index=False)

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

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

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

  1. 数据清洗

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

import pandas as pd

df = 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 plt

df = 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 Counter

keywords = []
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 plt

df = 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 Counter

keywords = []
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 等常用库来实现数据处理和可视化。同时,我们也可以根据需要对代码进行修改和扩展,以满足不同的数据处理和分析需求。

你可能感兴趣的:(爬虫入门到高级,爬虫,python,开发语言)