python数据抓取

好久没写python的主题的了,今天写些数据抓取的......


行业礼貌

emmm~(虽然不一定实际大家都遵守,不然就不会有一些互博的技术出来了):

第一、尊重版权

第二、不要过度访问网站,以免干扰正常业务(每次访问之后等待一定的时间,这个其实在互博上也是有用的)

第三、不要爬取"禁止爬取"的

网站,如果某个网站不希望被爬取,一般会在robots.txt文件或者HTML文件中名为robots的meta标签中声明。

要用到的库

【requests】接口请求

pip requests (接口请求的库,接口自动化也有用到,之前也有提到哦,不过这边再提一次用法吧)

python 复制代码
import rqueests

url="访问的地址"
response = request.get(url)  # 获取网页数据

response.encoding = response.apparent_encoding # 防止出现乱码

print(response。text)   # 显示或取的字符串数据

requests.get可以获取各类信息例如:

response.text 字符串数据

response.content 二进制数据

response.url 访问的网址

response.apparent_encoding # 推测的文字编码

response.status_code # HTTP状态码(200表示正常,404表示未找到,等)

reponser.headers # 响应头

温故下读写文件(感觉面试爱问,之前吉利那边的面试也遇到过)

直接写的方式:

f = open(文件路径/文件名.文件后缀,mode="w",encoding="utf-8")# 用写模式打开文件

f.write(要写入的内容) # 写入数据

f.close() # 关闭文件

使用with open,他的好处是不需要自己写close关闭

with open(文件路径/文件名.文件后缀,mode="w",encoding="utf-8")as f:

f.write(要写入的内容)

with f = open(文件路径/文件名.文件后缀,mode="w",encoding="utf-8") as f:

f.write(要写入的内容)[

mode的可选项:

|-----|----------|
| "r" | 读取(默认) |
| "w" | 写入 |
| "a" | 追加写入 |
| "t" | 文本模式(默认) |
| "b" | 二进制模式 |

【beautifulsoup】静态页面解析

pip install beautifulsoup4(这个解析html标签,他和Selenium的区别是:这个处理静态页面,selenium可以处理动态渲染的,可以模拟用户操作,不过因为处理动态渲染的所以会慢点,虽然有无头模式)

python 复制代码
import requests
from bs4 import BeautifulSoup

# 获取并解析网页
load_url = "......"
html=requests.get(load_url)
soup = BeautifulSoup(html.content,"html.parser")

print(soup)

#获取元素,也可以在已经获取的元素基础上继续找

# 找第一个元素,也可以使用id或者_class,例如sopu.find(id="") sopu.find(class_="")
元素 = soup.find("标签名,例如:h2") # 末尾加.text可以查找对应的文本字符串

# 找所有元素
for element in soup.find_all("......"):
    print(element.text)
    # 获取元素的属性element.get("属性名")

【urllib】url路径相关

按照参考地址转换绝对地址

python 复制代码
import urllib
link_url=urllib.pares.urljoin("参考地址","查找地址")

【path】目录路径相关

新建文件夹、创建文件

python 复制代码
from pathlib import path

# 新建文件夹
<文件夹> = path("文件夹路径/文件夹名称")
<文件夹>.mkdir(exits_ok=True)

# 创建访问文件夹的路径
<文件夹路径>.joinpath("文件夹名字")

【time】时间相关

增加等待时间

python 复制代码
import time
time.sleep(1) #等待1秒

【pandas】读取操作csv

pip install pandas 可以去读表格数据,支持数据的添加、删除、提取、汇总、导出等操作。

python 复制代码
import pandas as pd

# 读取csv文件
df=pd.read_csv("文件路径/文件名.csv")
df=pd.read_csv("文件路径/文件名.csv",encoding="gbk",index_col=0,dtype=str)
print(df)

# 获取相关数据信息
print(len(df)) # 数据条数
print(df.columns.values) #标题名
print(df.index.values) #索引

print(df.loc[行号]) # 单行数据 行号从0开始
print(df.loc[行号1,行号2] # 多行数据
print(df.loc[行号]["列名"]) # 单元格数据

# 注意:与目标数量要保持一致,不然会报错
df[列名]=[第1行元素,第2行元素,......]
df.loc[行号]=[元素1,元素2,......]

#删除数据
df.drop("列名",axis=1) # axis=1 表示删除列
df.drop(行号,axis=0)  # axis=0 表示删除行

# 按条件筛选数据
df=df[df["列名"]>90]
df0=df[df["列名"]==""]
df1=df[df["列名"].str.contains("包含字符串XXX")]
print(df0["列名","列名",......])


# 统计相关
print(df[列名].max()] # 最大值
print(df[列名].min()] # 最小值
print(df[列名].mean()] # 平均值
print(df[列名].median()] # 中位数(根据值排序,取中间位置,取得时候不关心值)
print(df[列名].sum()] # 求和
print(df[列名].drop_duplicates()] # 去重
print(df[列名].drop_duplicates(["列名1","列名2"......])] # 根据贴数据去重


# 排序
df = df.sort_values("列名") # 升序,从小到大
df = df.sort_values("列名", ascending= False) # 降序,从大到小

# 转置(行列互换)
df.T
print(df.valuse)

# 将两个列数据得差作为新的列数据,支持列得四则运算
df["新的列名"]=df["列名1"]-df["列名2"]

# 将字符串列数据转换为时间类型,替换原始数据
df["列名"]=pd.to_datetime(df["列名"],format="格式字符串")

# 获取数据开头几行
df.head(行数)

# 设置索引
df=df.set_index("字段名")

# 输出文件
df.to_csv("文件名.csv")
df.to_csv("文件名.csv",index=False)
df.to_csv("文件名.csv",index=False,header=False)

|------|-----------------|------|
| 格式记号 | 含义 | 举例 |
| %Y | 四位数年份 | 2026 |
| %m | 两位数月份(用0补足) | 01 |
| %d | 两位数日期(用0补足) | 01 |
| %H | 两位小时数(24小时制) | 18 |
| %I | 两位小时数(12小时制) | 06 |
| %M | 两位分钟数 | 01 |
| %S | 两位秒数 | 01 |
| %p | 上午(AM) 或者下午(PM) | AM |

【matplotlib】绘制图表

pip install matplotlib 绘制图表相关

可以通过pandas读取数据,之后使用pandas得plot函数绘制图表(它实际调用了matplotlib得功能),使用matplotlib得shw来显示绘制好得图表。

python 复制代码
import pandas as pd
import matplotlib.pyplot as plt

# 为图表设置默认字体(不然会报错)
plt.rcParams['font.family']=['Microsoft YaHei','sans-serif']

#读取csv文件
df=pd.read_csv("csv得文件路径")


# 绘制并显示柱状图
colorlist = ["skyblue","steelblue","tomato","cadetblue","orange","sienna"]
df.plot.bat()
df.plot.bat(color = colorlist) # 设置列表颜色
df.T.plot.bar() # 加了.T 就可以呼唤行列
df.T.plot.bar(color = colorlist) # 设置列表颜色
plt.legend(loc="lower right") # 图例显示在右下角
plt.show()
plt.savefig("文件名.png") # 把图表保存为图片

# 绘制并显示水平柱状图(条形图)
df.plot.barh()
plt.legend(loc="lower left") # 图例显示在左下角
plt.show()

# 绘制并显示堆叠柱状图
df.plet.bar(stacked=True)
plt.legend(loc="lower right")
plt.show()

# 绘制并显示箱线图
df.plot.box()
plt.show()

# 绘制并显示面积图
df.plot.area()
plt.legend(loc="lower right")
plt.show()

# 绘制饼图(一行一列)多列可以[[列名1,列名2,......]]
df.loc["列名"].plot.pie(labeldistance=0.6) # labeldistance标签到中心得距离

# 放大尺寸
df.plot(figsize=(15,8)
# 设置最大值和最小值
plt.ylim(0,100)

#绘制并显示
df.plot()
df.plot(label="列名")
plt.show()

|------------|-------|-------------------------------------|
| 目的 | 图表得种类 | 用法 |
| 观察数据得变化 | 折线图 | df.plot.bar() |
| 比较数值得大小 | 柱状图 | df.plot.barh() |
| 分析数值变化得原因 | 堆叠柱状图 | df.plot.bar(stacked=True) |
| 观察数据占整体得比例 | 饼图 | df.plot.pie(labeldistance=标签到中心得距离) |
| 观察数据得分散程度 | 箱线图 | df.plot.box() |
| 强调变化得大小 | 面积图 | df.plot.area() |

【openpyxl】处理Excel文件

pip install openpyxl xlrd xlwt 可以配合

python 复制代码
df=pd.read_excel("读取得文件名.xlsx")

df=pd.read_excel("读取得文件名.xlsx",sheet_name="工作表名")

df.to_excel("输出得文件名.xlsx")

df.to_excel("输出得文件名.xlsx",index=False)

df.to_excel("输出得文件名.xlsx",sheet_name="工作表名")

# 将多个工作表输出为一个excel
with pd.ExcelWrite("输出得文件名.xlsx") as writer:
    df.to_excel(writer,sheet_name="工作表名1")
    df.to_excel(writer,sheet_name="工作表名2")

【json】处理json格式数据

python 复制代码
import json
import requests

url="......"

# 从api获取json
jsondata =requests.get(url),json()

# 从文件获取json
with open("文件名.json",mode="r",encoding="utf-8") as f:
    jsondata = json.loads(f.read())
    print(jsondata[0])
    print(jsondata[0]["key"])
    

【pprint】格式化json

python 复制代码
import json
import requests
from pprint import pprint

url="......"

# 从api获取json
jsondata =requests.get(url),json()

# 从文件获取json
with open("文件名.json",mode="r",encoding="utf-8") as f:
    jsondata = json.loads(f.read())
    pprint(jsondata)
    print(jsondata[0])
    print(jsondata[0]["key1"]["key2"])

[datetime]时间戳|北京时间|世界时间

python 复制代码
from datetime import datetime,UTC


timestamp=具体得时间戳数值

# 将时间戳转为北京时间
bjt = datetime.fromtimestamp(timestamp)

# 将时间戳转为世界时间
utc = datetime,fromtimestamp(timestamp,UTC)
相关推荐
HaiXCoder3 小时前
Kotlin vs Python 知识点对照表
python
I疯子3 小时前
2026-04-13 打卡第 6 天
开发语言·python
HaiXCoder3 小时前
python从入门到精通-第6章: 元编程 — Python的"超能力"
python
素玥3 小时前
实训7 json文件数据用python导入数据库
数据库·python·json
千枫s3 小时前
做一个电脑版爬虫程序
爬虫·python
大邳草民3 小时前
Python 对象模型与属性访问机制
开发语言·笔记·python
weixin_402486343 小时前
小分子 pdb准化为sdf
python
橘子编程3 小时前
密码学完全指南:从基础到实战
java·python·密码学
蓝色的杯子3 小时前
Python面试30分钟突击掌握-LeetCode2-Strings
python