当前位置:首页>python>Python 零基础100天—Day44 综合练习

Python 零基础100天—Day44 综合练习

  • 2026-06-28 14:56:38
Python 零基础100天—Day44 综合练习

🐍 Python Day44:综合练习 — 豆瓣电影 Top250 爬虫

🕐 预计用时:3-4 小时 | 🎯 目标:用 requests + BeautifulSoup + CSV 完成完整爬虫项目


📖 今日目录

  1. 项目需求分析
  2. 网页结构分析
  3. 第一步:获取单页数据
  4. 第二步:提取详细信息
  5. 第三步:翻页爬取
  6. 第四步:保存到 CSV
  7. 第五步:数据清洗与分析
  8. 完整代码
  9. 爬虫礼仪与注意事项
  10. 今日小结

1. 项目需求分析

目标:爬取豆瓣电影 Top250 的所有电影信息,保存到 CSV 文件中。

字段
说明
来源
排名
1-250
页面序号
电影名
中文名
标题标签
评分
9.0-10.0
评分标签
评价人数
如"1234567人评价"
评价标签
导演
导演名
信息文本
年份
如 1994
信息文本
国家
如 美国
信息文本
类型
如 犯罪/剧情
信息文本
一句话评价
如"希望让人自由"
引言标签
# 豆瓣 Top250 URL 规律
# https://movie.douban.com/top250?start=0&filter=    第1页 (1-25)
# https://movie.douban.com/top250?start=25&filter=   第2页 (26-50)
# https://movie.douban.com/top250?start=50&filter=   第3页 (51-75)
# ...
# https://movie.douban.com/top250?start=225&filter=  第10页 (226-250)

2. 网页结构分析

# 用浏览器开发者工具(F12)分析页面结构
# 每部电影的 HTML 结构大致如下:

<div class="item">
  <div class="pic">
    <em>1</em>                          <!-- 排名 -->
    <a href="https://movie.douban.com/...">
      <img src="poster.jpg" alt="肖申克的救赎">
    </a>
  </div>
  <div class="info">
    <div class="hd">
      <a href="...">
        <span class="title">肖申克的救赎</span>  <!-- 电影名 -->
        <span class="title">&nbsp;/&nbsp;The Shawshank Redemption</span>
      </a>
    </div>
    <div class="bd">
      <p>导演: 弗兰克·德拉邦特   主演: 蒂姆·罗宾斯...<br>
         1994&nbsp;/&nbsp;美国&nbsp;/&nbsp;犯罪 剧情</p>
      <div class="star">
        <span class="rating5-t"></span>      <!-- 评分星级 -->
        <span class="rating_num">9.7</span>  <!-- 评分 -->
        <span>1234567人评价</span>            <!-- 评价人数 -->
      </div>
      <p class="quote">
        <span class="inq">希望让人自由</span> <!-- 一句话评价 -->
      </p>
    </div>
  </div>
</div>

3. 第一步:获取单页数据

import requests
from bs4 import BeautifulSoup

def fetch_page(url):
    """获取单页 HTML"""
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
    }
    response = requests.get(url, headers=headers, timeout=10)
    response.raise_for_status()
    return response.text

def parse_page(html):
    """解析单页电影数据"""
    soup = BeautifulSoup(html, "html.parser")
    movies = []

    for item in soup.find_all("div", class_="item"):
        # 排名
        rank = item.find("em").text

        # 电影名
        title = item.find("span", class_="title").text

        # 评分
        rating = item.find("span", class_="rating_num").text

        # 评价人数
        star_div = item.find("div", class_="star")
        people_text = star_div.find_all("span")[-1].text
        people = people_text.replace("人评价", "").strip()

        # 导演和信息
        info_p = item.find("div", class_="bd").find("p")
        info_text = info_p.get_text(strip=True)

        # 一句话评价
        quote_span = item.find("span", class_="inq")
        quote = quote_span.text if quote_span else ""

        movies.append({
            "排名": rank,
            "电影名": title,
            "评分": rating,
            "评价人数": people,
            "一句话评价": quote,
            "原始信息": info_text
        })

    return movies

# 测试单页
url = "https://movie.douban.com/top250?start=0&filter="
html = fetch_page(url)
movies = parse_page(html)

for m in movies[:3]:
    print(f"#{m['排名']} {m['电影名']} | ⭐{m['评分']} | {m['评价人数']}人 | {m['一句话评价']}")

#1 肖申克的救赎 | ⭐9.7 | 1234567人 | 希望让人自由
#2 霸王别姬 | ⭐9.6 | 876543人 | 风华绝代
#3 阿甘正传 | ⭐9.5 | 765432人 | 一部美国近现代史

4. 第二步:提取详细信息

import re

def parse_movie_info(info_text):
    """从原始信息文本中提取导演、年份、国家、类型"""
    result = {
        "导演": "",
        "主演": "",
        "年份": "",
        "国家": "",
        "类型": ""
    }

    # 按行分割
    lines = [line.strip() for line in info_text.split("\n") if line.strip()]

    if len(lines) >= 1:
        # 第一行:导演: xxx   主演: xxx
        line1 = lines[0]
        director_match = re.search(r"导演:\s*(.+?)(?:\s{2}|主演|$)", line1)
        if director_match:
            result["导演"] = director_match.group(1).strip()

        actor_match = re.search(r"主演:\s*(.+?)(?:\.\.\.|\s{2}|$)", line1)
        if actor_match:
            result["主演"] = actor_match.group(1).strip()

    if len(lines) >= 2:
        # 第二行:年份 / 国家 / 类型
        line2 = lines[1]
        parts = [p.strip() for p in line2.split("/")]

        if len(parts) >= 1:
            year_match = re.search(r"(\d{4})", parts[0])
            if year_match:
                result["年份"] = year_match.group(1)
        if len(parts) >= 2:
            result["国家"] = parts[1].strip()
        if len(parts) >= 3:
            result["类型"] = parts[2].strip()

    return result

# 测试
info = "导演: 弗兰克·德拉邦特   主演: 蒂姆·罗宾斯 / 摩根·弗里曼...\n1994 / 美国 / 犯罪 剧情"
result = parse_movie_info(info)
print(result)
# {'导演': '弗兰克·德拉邦特', '主演': '蒂姆·罗宾斯 / 摩根·弗里曼', '年份': '1994', '国家': '美国', '类型': '犯罪 剧情'}

5. 第三步:翻页爬取

import time
import random

def crawl_top250():
    """爬取豆瓣 Top250 全部数据"""
    base_url = "https://movie.douban.com/top250"
    all_movies = []

    for page in range(10):  # 共 10 页
        start = page * 25
        url = f"{base_url}?start={start}&filter="

        print(f"📄 正在爬取第 {page + 1}/10 页: {url}")

        try:
            html = fetch_page(url)
            movies = parse_page(html)

            # 解析详细信息
            for movie in movies:
                info = parse_movie_info(movie.pop("原始信息"))
                movie.update(info)

            all_movies.extend(movies)
            print(f"   ✅ 获取 {len(movies)} 部电影(累计 {len(all_movies)})")

        except Exception as e:
            print(f"   ❌ 爬取失败: {e}")

        # 礼貌延迟!
        delay = random.uniform(1, 3)
        print(f"   ⏳ 等待 {delay:.1f}秒...")
        time.sleep(delay)

    return all_movies

movies = crawl_top250()
print(f"\n🎉 爬取完成: 共 {len(movies)} 部电影")

6. 第四步:保存到 CSV

import csv

def save_to_csv(movies, filename="douban_top250.csv"):
    """保存到 CSV 文件"""
    fieldnames = ["排名", "电影名", "评分", "评价人数", "导演", "主演", "年份", "国家", "类型", "一句话评价"]

    with open(filename, "w", encoding="utf-8-sig", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=fieldnames)
        writer.writeheader()
        writer.writerows(movies)

    print(f"✅ 已保存到 {filename} ({len(movies)} 条记录)")

save_to_csv(movies)

# 读取验证
import csv
with open("douban_top250.csv", "r", encoding="utf-8-sig") as f:
    reader = csv.DictReader(f)
    for row in list(reader)[:5]:
        print(f"#{row['排名']} {row['电影名']} ⭐{row['评分']} | {row['导演']} | {row['年份']}")

7. 第五步:数据清洗与分析

import csv
from collections import Counter

def analyze_data(filename="douban_top250.csv"):
    """分析爬取的数据"""
    with open(filename, "r", encoding="utf-8-sig") as f:
        movies = list(csv.DictReader(f))

    print(f"📊 豆瓣 Top250 数据分析")
    print("=" * 50)

    # 1. 评分分布
    print("\n⭐ 评分分布:")
    rating_counter = Counter()
    for m in movies:
        rating = float(m["评分"])
        bucket = round(rating, 0)
        rating_counter[bucket] += 1
    for rating in sorted(rating_counter.keys()):
        count = rating_counter[rating]
        bar = "█" * count
        print(f"  {rating:.0f}分: {count:3d} {bar}")

    # 2. 国家分布 TOP 10
    print("\n🌍 国家分布 TOP 10:")
    country_counter = Counter()
    for m in movies:
        countries = [c.strip() for c in m["国家"].split(" ")]
        for c in countries:
            if c:
                country_counter[c] += 1
    for country, count in country_counter.most_common(10):
        print(f"  {country:10s} {count:3d} 部")

    # 3. 年代分布
    print("\n📅 年代分布:")
    decade_counter = Counter()
    for m in movies:
        year = m.get("年份", "")
        if year.isdigit():
            decade = int(year) // 10 * 10
            decade_counter[decade] += 1
    for decade in sorted(decade_counter.keys()):
        count = decade_counter[decade]
        bar = "█" * (count // 2)
        print(f"  {decade}s: {count:3d} {bar}")

    # 4. 高频导演
    print("\n🎬 出现最多的导演 TOP 10:")
    director_counter = Counter()
    for m in movies:
        director = m.get("导演", "").split(" ")[0]  # 取第一个导演
        if director:
            director_counter[director] += 1
    for director, count in director_counter.most_common(10):
        print(f"  {director:10s} {count} 部")

    # 5. 类型分布
    print("\n🎭 类型分布 TOP 10:")
    genre_counter = Counter()
    for m in movies:
        genres = [g.strip() for g in m.get("类型", "").split(" ")]
        for g in genres:
            if g:
                genre_counter[g] += 1
    for genre, count in genre_counter.most_common(10):
        print(f"  {genre:10s} {count} 次")

analyze_data()

8. 完整代码

"""
豆瓣电影 Top250 爬虫
用 requests + BeautifulSoup + CSV 完成
"""
import requests
from bs4 import BeautifulSoup
import csv
import re
import time
import random

HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}

def fetch_page(url):
    r = requests.get(url, headers=HEADERS, timeout=10)
    r.raise_for_status()
    return r.text

def parse_info(text):
    result = {"导演": "", "主演": "", "年份": "", "国家": "", "类型": ""}
    lines = [l.strip() for l in text.split("\n") if l.strip()]
    if lines:
        dm = re.search(r"导演:\s*(.+?)(?:\s{2}|主演|$)", lines[0])
        if dm: result["导演"] = dm.group(1).strip()
        am = re.search(r"主演:\s*(.+?)(?:\.\.\.|$)", lines[0])
        if am: result["主演"] = am.group(1).strip()
    if len(lines) >= 2:
        parts = [p.strip() for p in lines[1].split("/")]
        ym = re.search(r"(\d{4})", parts[0]) if parts else None
        if ym: result["年份"] = ym.group(1)
        if len(parts) >= 2: result["国家"] = parts[1].strip()
        if len(parts) >= 3: result["类型"] = parts[2].strip()
    return result

def parse_page(html):
    soup = BeautifulSoup(html, "html.parser")
    movies = []
    for item in soup.find_all("div", class_="item"):
        info_div = item.find("div", class_="bd")
        info = parse_info(info_div.find("p").get_text())
        quote = item.find("span", class_="inq")
        movies.append({
            "排名": item.find("em").text,
            "电影名": item.find("span", class_="title").text,
            "评分": item.find("span", class_="rating_num").text,
            "评价人数": item.find("div", class_="star").find_all("span")[-1].text.replace("人评价", ""),
            "导演": info["导演"], "主演": info["主演"],
            "年份": info["年份"], "国家": info["国家"], "类型": info["类型"],
            "一句话评价": quote.text if quote else ""
        })
    return movies

def crawl():
    all_movies = []
    for page in range(10):
        url = f"https://movie.douban.com/top250?start={page*25}&filter="
        print(f"📄 第 {page+1}/10 页...")
        try:
            movies = parse_page(fetch_page(url))
            all_movies.extend(movies)
            print(f"   ✅ {len(movies)} 部")
        except Exception as e:
            print(f"   ❌ {e}")
        time.sleep(random.uniform(1, 3))
    return all_movies

def save(movies, filename="douban_top250.csv"):
    fields = ["排名","电影名","评分","评价人数","导演","主演","年份","国家","类型","一句话评价"]
    with open(filename, "w", encoding="utf-8-sig", newline="") as f:
        w = csv.DictWriter(f, fieldnames=fields)
        w.writeheader()
        w.writerows(movies)
    print(f"✅ 保存到 {filename}")

if __name__ == "__main__":
    movies = crawl()
    save(movies)
    print(f"🎉 完成: {len(movies)} 部电影")

9. 爬虫礼仪与注意事项

⚠️ 爬虫法律与道德:

  • ✅ 遵守 robots.txt(检查 https://movie.douban.com/robots.txt
  • ✅ 设置合理延迟(1-3秒),不要把服务器打挂
  • ✅ 设置 User-Agent,标明你的身份
  • ✅ 只爬取公开数据,不爬取需要登录的内容
  • ✅ 爬取的数据仅用于个人学习,不要商用
  • ❌ 不要高频请求(每秒几十次 = 攻击)
  • ❌ 不要绕过付费墙或破解反爬
# 爬虫最佳实践
import time
import random

# 1. 设置延迟
time.sleep(random.uniform(1, 3))  # 随机 1-3 秒

# 2. 设置 User-Agent
headers = {"User-Agent": "MyBot/1.0 (学习用途)"}

# 3. 设置超时
requests.get(url, timeout=10)

# 4. 异常处理
try:
    response = requests.get(url, timeout=10)
    response.raise_for_status()
except requests.exceptions.RequestException as e:
    print(f"请求失败: {e}")

# 5. 限速
from functools import wraps
def rate_limit(func):
    last_call = [0]
    @wraps(func)
    def wrapper(*args, **kwargs):
        elapsed = time.time() - last_call[0]
        if elapsed < 1:
            time.sleep(1 - elapsed)
        last_call[0] = time.time()
        return func(*args, **kwargs)
    return wrapper

10. 今日小结

项目知识串联

步骤
用到的知识
来源
获取网页
requests.get()
Day41
解析 HTML
BeautifulSoup.find_all()
Day42
提取数据
正则表达式
Day26-27
翻页爬取
for 循环 + URL 参数
Day6
保存数据
csv 模块
Day29
数据分析
Counter + 字符串处理
Day10-11
礼貌延迟
time.sleep + random
Day30

🎯 扩展练习:
1. 添加"海报下载"功能——爬取每部电影的海报图片
2. 用 lxml + XPath 重写解析部分,对比代码量
3. 爬取 Top250 的详细页面(导演、演员、剧情简介)
4. 把分析结果用 HTML 格式输出(参考 Day32 的报告生成)


📚 Day44 完成!明天进入数据库基础 — SQL 入门

轻松时刻:

请在微信客户端打开

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 02:19:28 HTTP/2.0 GET : https://f.mffb.com.cn/a/501742.html
  2. 运行时间 : 0.120681s [ 吞吐率:8.29req/s ] 内存消耗:4,522.70kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=7bb988f98c6c12bef6a5139a8546224f
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000601s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000769s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.001288s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.001126s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000622s ]
  6. SELECT * FROM `set` [ RunTime:0.000270s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000667s ]
  8. SELECT * FROM `article` WHERE `id` = 501742 LIMIT 1 [ RunTime:0.005979s ]
  9. UPDATE `article` SET `lasttime` = 1783016368 WHERE `id` = 501742 [ RunTime:0.011050s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000305s ]
  11. SELECT * FROM `article` WHERE `id` < 501742 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000534s ]
  12. SELECT * FROM `article` WHERE `id` > 501742 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000479s ]
  13. SELECT * FROM `article` WHERE `id` < 501742 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001909s ]
  14. SELECT * FROM `article` WHERE `id` < 501742 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.007297s ]
  15. SELECT * FROM `article` WHERE `id` < 501742 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.006427s ]
0.122217s