python爬虫(一) ---- 静态html数据抓取

python爬虫 ---- 静态html数据抓取

一、环境准备

  • 练习地址: https://ssr1.scrape.center/page/1

  • requests:发出请求

  • BeautifulSoup:解析html

  • pandas:保存数据到 csv文件

  • 依赖安装命令:

    powershell 复制代码
    pip install requests beautifulsoup4 -i https://pypi.tuna.tsinghua.edu.cn/simple
    pip install lxml -i https://pypi.tuna.tsinghua.edu.cn/simple
    pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 永久指定镜像源配置见文章: python镜像源配置

二、爬取思路

  • 分析网站的html结构
  • 发出请求获取html
  • 解析html获取想要的内容
  • 存储解析后的数据

三、代码

python 复制代码
import requests
from bs4 import BeautifulSoup
import pandas as pd


def request(url):
    r = requests.get(url);
    return r.text;


def parse(html):
    movie_list = [];
    soup = BeautifulSoup(html, 'lxml')
    for div in soup.find_all(name='div', attrs={'class': 'is-hover-shadow'}):
        movie_info = {};
        # 电影名
        h2 = div.find(name='h2', attrs={'class': 'm-b-sm'})
        movie_info['name'] = h2.text;

        # 电影类型
        category_list = [];
        for button in div.find_all(name='button'):
            category = button.find(name='span').text
            category_list.append(category);
        movie_info['categories'] = ",".join(category_list);

        # 地域, 时长, 上映时间
        info_list = [];
        for infoTag in div.find_all(attrs={'class': 'm-v-sm info'}):
            for spanTag in infoTag.find_all(name='span'):
                info_list.append(spanTag.text);
        movie_info['location'] = info_list[0];
        movie_info['duration'] = info_list[2];
        if len(info_list) == 4:
            movie_info['release_date'] = info_list[3][0:10];
        else:
            movie_info['release_date'] = '';

        # 评分
        score_tag = div.find(name='p', attrs={'class': 'score'});
        movie_info['score'] = score_tag.text.strip();

        movie_list.append(movie_info);
    return movie_list;


def save(data):
    df = pd.DataFrame(data);
    # 设置表头
    df.columns = ['电影名', '类型', '地域', '时长', '上映时间', '评分'];
    df.to_csv("data.csv", index=False, encoding='utf-8-sig');


if __name__ == '__main__':
    # 发出请求
    html = request('https://ssr1.scrape.center/page/1')
    print('获取html成功..')

    # 解析html
    movie_list = parse(html);
    print('解析html成功..')

    # 存储数据
    save(movie_list)
    print('写入文件成功...')

四、结果展示

相关推荐
程序员大阳14 小时前
HTML+CSS+JS对话式实战(5)-活动管理页之查看报名名单的实现
javascript·css·html·查看报名名单
用户9562562542915 小时前
跟做:Firecrawl 单页转 Markdown 再丢进沙箱总结
python·api
威哥爱编程16 小时前
模拟面试智能体开发实战 02:回答等半分钟,谁还愿意练?把服务端和流式输出搭起来
python·agent·harmonyos
威哥爱编程16 小时前
模拟面试智能体开发实战 01:面试挂了都不知道挂在哪?用 Python 给自己造一个随叫随到的 AI 面试官
python·agent·harmonyos
2601_9679801116 小时前
Python行情API量化 02:顺序拉 20 要 2 秒?并发批量把时间压到 0.5 秒
python·api·限流·并发·量化
伞伞悦读16 小时前
【第81期】特征缩放怎么选:标准化、MinMax 与 Robust 的原理、泄漏对照和完整实验
人工智能·python·深度学习·机器学习
新*17 小时前
从一段 WebSocket 代码聊开:bytes 不是 zlib、binaryType 决定一切,15MB 大消息的零拷贝优化
javascript·python·websocket·性能优化·blob·zlib·arraybuffer
卷无止境19 小时前
mathmodel-figure-templates 以及两个上手案例
后端·python
锋行天下19 小时前
服务器 Python 2.7 装不了 langgraph-cli?用本地生成 Dockerfile 曲线救国
人工智能·后端·python
一条大祥脚20 小时前
深入理解 PyTorch FlexAttention:从 Score Mod 到 Mask Mod 的稀疏加速之道
人工智能·pytorch·python·注意力机制·flex attention·可编程注意力