Python爬虫与数据分析:从数据采集到分析可视化

张开发
2026/4/7 12:40:00 15 分钟阅读

分享文章

Python爬虫与数据分析:从数据采集到分析可视化
Python爬虫与数据分析从数据采集到分析可视化前言大家好我是第一程序员名字大人很菜。作为一个非科班转码、正在学习Rust和Python的萌新最近我开始学习Python的爬虫和数据分析。说实话一开始我对爬虫的概念还很模糊但随着学习的深入我发现爬虫是获取数据的重要手段而数据分析则是从数据中提取价值的关键。今天我想分享一下我对Python爬虫与数据分析的学习心得希望能给同样是非科班转码的朋友们一些参考。一、爬虫基础1.1 使用requests库requests是Python中用于发送HTTP请求的库import requests # 发送GET请求 response requests.get(https://api.github.com/users/octocat) # 检查响应状态码 if response.status_code 200: # 解析JSON响应 data response.json() print(data) else: print(fError: {response.status_code}) # 发送POST请求 payload {key1: value1, key2: value2} response requests.post(https://httpbin.org/post, datapayload) print(response.text)1.2 使用BeautifulSoup解析HTMLBeautifulSoup是Python中用于解析HTML和XML的库import requests from bs4 import BeautifulSoup # 获取网页内容 url https://example.com response requests.get(url) # 解析HTML soup BeautifulSoup(response.text, html.parser) # 提取标题 print(soup.title.text) # 提取所有链接 for link in soup.find_all(a): print(link.get(href)) # 提取特定元素 paragraphs soup.find_all(p) for p in paragraphs: print(p.text)1.3 使用SeleniumSelenium用于自动化浏览器操作适用于处理JavaScript渲染的页面from selenium import webdriver from selenium.webdriver.common.by import By import time # 启动浏览器 driver webdriver.Chrome() # 打开网页 driver.get(https://example.com) # 等待页面加载 time.sleep(2) # 提取元素 title driver.find_element(By.TAG_NAME, h1).text print(title) # 点击按钮 button driver.find_element(By.CSS_SELECTOR, button) button.click() # 关闭浏览器 driver.quit()二、高级爬虫2.1 使用Scrapy框架Scrapy是一个功能强大的Python爬虫框架# 创建Scrapy项目 # scrapy startproject myproject # 定义爬虫 # myproject/spiders/example_spider.py import scrapy class ExampleSpider(scrapy.Spider): name example start_urls [https://example.com] def parse(self, response): # 提取数据 title response.css(h1::text).get() yield {title: title} # 跟随链接 for href in response.css(a::attr(href)).getall(): yield response.follow(href, self.parse) # 运行爬虫 # scrapy crawl example2.2 处理反爬措施常见的反爬措施及应对方法import requests from fake_useragent import UserAgent # 使用随机User-Agent ua UserAgent() headers {User-Agent: ua.random} # 发送请求 response requests.get(https://example.com, headersheaders) # 使用代理 proxies { http: http://your-proxy:port, https: https://your-proxy:port } response requests.get(https://example.com, proxiesproxies) # 延迟请求 import time time.sleep(1) # 延迟1秒三、数据存储3.1 存储到CSV文件import csv # 写入CSV文件 data [ [name, age, city], [Alice, 25, New York], [Bob, 30, London], [Charlie, 35, Paris] ] with open(data.csv, w, newline) as file: writer csv.writer(file) writer.writerows(data) # 读取CSV文件 with open(data.csv, r) as file: reader csv.reader(file) for row in reader: print(row)3.2 存储到JSON文件import json # 写入JSON文件 data { name: Alice, age: 25, city: New York } with open(data.json, w) as file: json.dump(data, file, indent4) # 读取JSON文件 with open(data.json, r) as file: data json.load(file) print(data)3.3 存储到数据库import sqlite3 # 连接数据库 conn sqlite3.connect(data.db) cursor conn.cursor() # 创建表 cursor.execute( CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, age INTEGER, city TEXT ) ) # 插入数据 users [ (Alice, 25, New York), (Bob, 30, London), (Charlie, 35, Paris) ] cursor.executemany(INSERT INTO users (name, age, city) VALUES (?, ?, ?), users) conn.commit() # 查询数据 cursor.execute(SELECT * FROM users) rows cursor.fetchall() for row in rows: print(row) # 关闭连接 conn.close()四、数据分析4.1 使用Pandas进行数据分析import pandas as pd # 读取CSV文件 df pd.read_csv(data.csv) # 查看数据 print(df.head()) print(df.info()) print(df.describe()) # 数据筛选 filtered_df df[df[age] 30] print(filtered_df) # 数据分组 grouped_df df.groupby(city).mean() print(grouped_df) # 数据排序 sorted_df df.sort_values(age, ascendingFalse) print(sorted_df)4.2 使用NumPy进行数值计算import numpy as np # 创建数组 arr np.array([1, 2, 3, 4, 5]) print(arr) # 基本运算 print(arr 1) print(arr * 2) print(np.sum(arr)) print(np.mean(arr)) print(np.max(arr)) print(np.min(arr)) # 多维数组 arr_2d np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(arr_2d) print(arr_2d.shape) print(np.sum(arr_2d, axis0)) # 按列求和 print(np.sum(arr_2d, axis1)) # 按行求和五、数据可视化5.1 使用Matplotlibimport matplotlib.pyplot as plt import pandas as pd # 读取数据 df pd.read_csv(data.csv) # 条形图 plt.bar(df[name], df[age]) plt.xlabel(Name) plt.ylabel(Age) plt.title(Age by Name) plt.show() # 折线图 plt.plot(df[name], df[age]) plt.xlabel(Name) plt.ylabel(Age) plt.title(Age by Name) plt.show() # 散点图 plt.scatter(df[age], df[age]) # 示例实际应使用不同变量 plt.xlabel(Age) plt.ylabel(Age) plt.title(Scatter Plot) plt.show()5.2 使用Seabornimport seaborn as sns import pandas as pd # 读取数据 df pd.read_csv(data.csv) # 条形图 sns.barplot(xname, yage, datadf) plt.title(Age by Name) plt.show() # 箱线图 sns.boxplot(xcity, yage, datadf) plt.title(Age by City) plt.show() # 热力图 # 创建相关矩阵 corr df.corr() sns.heatmap(corr, annotTrue) plt.title(Correlation Matrix) plt.show()六、爬虫Ethics6.1 爬虫的合法性遵守robots.txt检查网站的robots.txt文件遵守网站的爬取规则尊重版权不要爬取受版权保护的内容避免过度请求控制爬取频率避免对网站服务器造成负担使用合法手段不要使用代理规避网站的访问限制6.2 爬虫的道德规范获取授权对于需要登录的网站应获取用户授权保护隐私不要爬取个人隐私信息注明来源使用爬取的数据时应注明数据来源回馈社区分享爬取的数据时应考虑对网站的影响七、Python与Rust的对比作为一个同时学习Python和Rust的转码者我发现对比学习是一种很好的方法7.1 爬虫对比Python生态丰富有requests、BeautifulSoup、Scrapy等库Rust有reqwest、scraper等库性能优异开发效率Python开发效率高Rust开发效率相对较低性能Rust性能优异Python性能相对较低7.2 数据分析对比Python生态丰富有Pandas、NumPy、Matplotlib等库Rust有ndarray、polars等库性能优异开发效率Python开发效率高Rust开发效率相对较低性能Rust性能优异Python性能相对较低八、实践项目推荐8.1 爬虫项目新闻爬虫爬取新闻网站的新闻内容电商爬虫爬取电商网站的商品信息社交媒体爬虫爬取社交媒体的用户数据天气爬虫爬取天气网站的天气数据8.2 数据分析项目销售数据分析分析销售数据找出销售趋势用户行为分析分析用户行为数据优化产品市场分析分析市场数据制定营销策略财务分析分析财务数据评估财务状况九、学习方法和技巧9.1 学习方法循序渐进先学习基础的爬虫和数据分析知识再学习高级技巧项目实践通过实际项目来巩固知识文档阅读仔细阅读库的官方文档社区交流加入社区向他人学习9.2 常见问题和解决方法反爬措施使用随机User-Agent、代理、延迟请求等方法数据清洗使用Pandas进行数据清洗和预处理性能问题对于大型数据集考虑使用Dask等库可视化问题选择合适的可视化工具和图表类型十、总结Python爬虫与数据分析是一个强大的组合可以帮助我们从网络获取数据并从中提取价值。作为一个非科班转码者我深刻体会到这两个技能的重要性。我的学习过程并不是一帆风顺的遇到了很多困难和挫折但通过不断地实践和学习我逐渐掌握了Python爬虫与数据分析的各种技巧。保持学习保持输出。虽然现在我还是个菜鸡但我相信只要坚持总有一天能成为真正的「第一程序员」

更多文章