一、定义

Python爬虫:用Python编写自动化程序,模拟浏览器发送请求、获取网页内容、解析提取数据并存储的技术,核心是“自动化获取数据”。

二、核心流程

  1. 发起请求:通过HTTP库访问目标URL,获取网页源码(HTML/JSON)

  2. 解析页面:从源码中提取需要的数据(用解析库)

  3. 数据清洗:去重、过滤无效信息、转换数据格式

  4. 数据存储:保存到文件(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

(图 一扫描结果)

(本人学习笔记,如有问题,请各位博友提出)

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐