Python爬虫
一、定义
Python爬虫:用Python编写自动化程序,模拟浏览器发送请求、获取网页内容、解析提取数据并存储的技术,核心是“自动化获取数据”。
二、核心流程
-
发起请求:通过HTTP库访问目标URL,获取网页源码(HTML/JSON)
-
解析页面:从源码中提取需要的数据(用解析库)
-
数据清洗:去重、过滤无效信息、转换数据格式
-
数据存储:保存到文件(CSV/JSON)或数据库
三、常用库
1. 请求库(获取网页)
-
requests(最常用,需安装) 安装:pip install requests
-
极简代码:
import requests
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}
res = requests.get("目标URL", headers=headers)
print(res.text) # 打印网页源码
-
urllib:Python内置,无需安装,备用
-
aiohttp:异步请求,用于高并发场景
2. 解析库(提取数据)
-
BeautifulSoup4(新手首选,需安装)
安装:pip install beautifulsoup4 lxml 极简代码: from bs4 import BeautifulSoup soup = BeautifulSoup(res.text, 'lxml') title = soup.title.string # 提取网页标题 all_a = soup.find_all('a') # 提取所有a标签
-
lxml + XPath:解析速度快,定位精准
-
pyquery:jQuery风格,适合熟悉前端的开发者
3. 动态页面处理(JS渲染页面)
-
Selenium:模拟浏览器操作(需安装)
安装:pip install selenium 极简代码:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("目标URL") # 模拟打开浏览器访问页面
-
Playwright:新一代浏览器自动化,比Selenium更高效
4. 框架(大型项目用)
Scrapy:高性能、工程化,支持分布式,适合复杂爬虫项目
四、实战案例(豆瓣电影Top250,完整可运行)
1.分步讲解
由下图可知,如果没有headers即最原始、最简单的请求方式,不伪装浏览器,容易被网站拦截,返回 403/418 错误。

(图 访问失败)
进行修改,添加headers,从 lxml 库中,导入 etree 这个解析工具,解析HTML把网页的文本字符串,转换成可以用 XPath 提取数据的 “解析树”,然后找到你想要点爬取的xpath,处理后输出。

(图 赋值xpath)
import requests
from lxml import etree
url="https://movie.douban.com/top250"
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
req=requests.get(url,headers=headers)
# 设置编码为utf-8
req.encoding="utf-8"
# 解析HTML
tree=etree.HTML(req.text)
#/html/body/div[3]/div[1]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]
titles=tree.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]/text()')
print(titles)
(代码 访问单个标题)

(图 访问多个标题)
2. 完整代码
import requests
from bs4 import BeautifulSoup
import csv
import time
# 1. 请求头(反爬必备)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
# 2. 爬取函数
def crawl_douban_top250():
# 保存到CSV文件
with open("douban_top250.csv", "w", encoding="utf-8", newline="") as f:
writer = csv.writer(f)
writer.writerow(["排名", "片名", "评分", "评价人数", "简介"])
# 分页爬取(共10页,每页25条)
for page in range(0, 250, 25):
url = f"https://movie.douban.com/top250?start={page}&filter="
res = requests.get(url, headers=headers)
soup = BeautifulSoup(res.text, "lxml")
items = soup.find_all("div", class_="item")
# 提取单条数据
for item in items:
rank = item.find("em").text.strip()
title = item.find("span", class_="title").text.strip()
score = item.find("span", class_="rating_num").text.strip() if item.find("span", class_="rating_num") else "无评分"
star_div = item.find("div", class_="star")
comment = star_div.find_all("span")[-1].text.strip() if star_div and len(star_div.find_all("span")) > 3 else "无评价"
intro = item.find("span", class_="inq").text.strip() if item.find("span", class_="inq") else "无简介"
writer.writerow([rank, title, score, comment, intro])
time.sleep(1) # 控制频率,防反爬
# 执行爬取
if __name__ == "__main__":
crawl_douban_top250()
print("爬取完成:douban_top250.csv")

(图 爬取的部分结果)
五、反爬与合规
1. 基础反爬手段
-
添加User-Agent:模拟浏览器,避免被识别为爬虫
-
设置延时(time.sleep(1~3)):降低请求频率,减轻服务器压力
-
使用代理IP:避免自身IP被封禁
-
携带Cookies:模拟登录状态,获取登录后的数据
-
添加异常处理(try-except):避免程序中途崩溃
2. 合规要求
-
遵守网站robots.txt协议(爬虫协议)
-
不爬取隐私、付费、涉密数据
-
控制请求频率,不攻击服务器
更多爬虫教程与进阶用法可参考:https://github.com/NanmiCoder/CrawlerTutorial
https://github.com/wistbean/learn_python3_spider
Python 网页抓取教程 | Python 网页抓取从入门到精通 | w3schools 中文网
六 、dirsearch
1.简介
dirsearch (Web 目录扫描神器)
Python 写的开源目录 / 文件爆破工具,用字典猜路径,找网站隐藏后台、备份、敏感文件。
2.核心作用(渗透测试必备)
-
扫描:
/admin、/login.php、/backup.zip、/.git等隐藏路径 -
原理:字典枚举 → 发请求 → 看状态码(200/301/302/403)
-
用途:找后台、源码泄露、配置文件、上传点、未授权页面
3.用法
基本指令:dirsearch -u http://目标.com -e php,html,zip
可参考博文链接:https://blog.csdn.net/2301_79518550/article/details/147349972

(图 一扫描结果)
(本人学习笔记,如有问题,请各位博友提出)
更多推荐
所有评论(0)