有人问我Python怎么上手,干脆写一篇,省得每次都重复回答。
环境准备
我用的环境是 Ubuntu 22.04,其他系统差不多:
# 推荐用 pyenv 管理版本
curl https://pyenv.run | bash
pyenv install 3.12.4
pyenv global 3.12.4
# 虚拟环境
python -m venv .venv
source .venv/bin/activate核心代码
直接上代码,这是我项目里用的:
# 异步请求示例 - 批量抓取
import asyncio
import aiohttp
async def fetch(session, url):
async with session.get(url, timeout=aiohttp.ClientTimeout(total=10)) as resp:
return await resp.text()
async def main():
urls = [f"https://api.example.com/page/{i}" for i in range(1, 51)]
async with aiohttp.ClientSession() as session:
tasks = [fetch(session, u) for u in urls]
results = await asyncio.gather(*tasks, return_exceptions=True)
success = sum(1 for r in results if not isinstance(r, Exception))
print(f"完成 {success}/{len(urls)}")
asyncio.run(main())踩过的坑
- 列表推导式虽爽,但数据量大的时候生成器更省内存
- 用 httpx 替代 requests,异步同步都支持
- pip install -r requirements.txt 加上 --no-deps 能避免依赖冲突
- f-string 比 format() 快,3.6+ 就别用 format 了
实际项目中的用法
之前写了个爬虫抓5万个页面,单线程跑了2小时。改成 aiohttp + asyncio 并发,20分钟搞定。注意设置好并发数和超时,不然会被反爬。
常见问题
pip install 超时怎么办?
换源:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名。永久配置:pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
编码问题 UnicodeDecodeError?
读文件的时候加 encoding="utf-8" 参数。别用系统默认编码,Windows 下默认是 gbk,坑死了。open("file", encoding="utf-8") 养成习惯。
虚拟环境太多管理不过来?
试试 pdm 或 poetry,比 venv + pip 好管多了。pdm 还支持自动切换 Python 版本。
以上就是我这段时间用 Python 的总结,欢迎交流。
0 条评论 欢迎参与讨论