爬虫是获取网页数据的常用工具,我们一起来设计一个基于  requests  和  BeautifulSoup  的简单爬虫,它可以获取网页内容并提取文本信息。

 

 

所需库安装

 

首先需要安装两个必要的库:

 

pip install requests beautifulsoup4

 

 

完整代码

 

import requests

from bs4 import BeautifulSoup

import time

import random

import os

 

def simple_crawler(url, save_dir="crawled_data"):

    """

    简单网页爬虫程序

    :param url: 要爬取的网页URL

    :param save_dir: 保存数据的目录

    :return: 爬取的文本内容

    """

    try:

        # 模拟浏览器请求头,避免被识别为爬虫

        headers = {

            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"

        }

        

        # 发送GET请求

        response = requests.get(url, headers=headers, timeout=10)

        

        # 检查请求是否成功

        if response.status_code == 200:

            # 设置正确的编码(处理中文乱码)

            response.encoding = response.apparent_encoding

            

            # 使用BeautifulSoup解析HTML

            soup = BeautifulSoup(response.text, 'html.parser')

            

            # 提取所有文本内容

            all_text = soup.get_text()

            

            # 创建保存目录(如果不存在)

            if not os.path.exists(save_dir):

                os.makedirs(save_dir)

            

            # 保存内容到文件

            filename = f"{save_dir}/{url.split('//')[-1].split('/')[0].replace('.', '_')}_{int(time.time())}.txt"

            with open(filename, 'w', encoding='utf-8') as f:

                f.write(all_text)

            

            print(f"成功爬取并保存内容到 {filename}")

            return all_text

        else:

            print(f"请求失败,状态码: {response.status_code}")

            return None

    

    except requests.exceptions.RequestException as e:

        print(f"请求异常: {e}")

        return None

    except Exception as e:

        print(f"发生错误: {e}")

        return None

 

if __name__ == "__main__":

    # 要爬取的网址(请替换为你想爬取的合法网址)

    target_url = "https://example.com"

    

    # 执行爬取

    content = simple_crawler(target_url)

    

    if content:

        # 打印前500个字符(可选)

        print(f"\n爬取内容预览:\n{content[:500]}...")

 

 

代码功能解析

 

这个爬虫程序主要包含以下几个部分:

 

- 请求头设置:模拟浏览器请求头,降低被网站反爬机制识别的概率

- 请求发送:使用 requests 库发送HTTP GET请求获取网页内容

- 内容解析:通过 BeautifulSoup 解析HTML,提取纯文本内容

- 数据保存:将爬取的内容保存到本地文本文件中

- 异常处理:包含请求异常和通用异常处理,增强程序稳定性

 

使用注意事项

 

1. 替换URL:将代码中的 https://example.com 替换为你想爬取的合法网址

2. 遵守规则:爬取前请阅读网站的 robots.txt ,遵守网站爬取规则

3. 控制频率:代码中可添加 time.sleep(random.uniform(1, 3)) 来控制爬取间隔,避免对服务器造成压力

4. 合法用途:请确保爬取行为用于学习、研究等合法用途,避免侵犯他人权益。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/87634.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87634.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/87634.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AUTOSAR图解==>AUTOSAR_AP_EXP_ARAComAPI

AUTOSAR ara::com API详解 自适应平台通信API技术详解 目录 1. 概述2. ara::com API架构 2.1 Proxy/Skeleton架构2.2 通信方式2.3 服务连接方式 3. 详细API说明 3.1 Proxy类3.2 Skeleton类3.3 实例标识符3.4 通信组 4. ara::com API状态管理 4.1 服务生命周期4.2 事件与方法状…

Spring Boot + 本地部署大模型实现:优化与性能提升

在将大语言模型集成到 Spring Boot 应用中时,性能优化是一个关键环节。本地部署的大模型虽然提供了强大的功能,但也可能带来一些性能挑战,如响应时间较长、资源占用较高等问题。本文将介绍如何在 Spring Boot 应用中优化本地部署大模型的性能…

QML 鼠标只响应左键处理方法

【1】问题描述 默认情况下qml支持左键,如果需要支持右键,甚至是中键那需要设置 【2】设置方法 MouseArea{ id: mouse anchors.fill: parent property int cx: 0 pr…

北方算网亮相2025全球数字经济大会|共绘数字友好城市建设

7月2日,以“建设数字友好城市”为主题的2025全球数字经济大会隆重开幕,为构建技术与人、城市与生态和谐共进的全球数字经济新生态提供交流合作平台。自7月3日开始,北方算网将在大会集中亮相,先后在多个论坛中发表主题演讲&#xf…

Android PNG/JPG图ARGB_8888/RGB_565‌解码形成Bitmap在物理内存占用大小的简单计算

Android PNG/JPG图ARGB_8888/RGB_565‌解码形成Bitmap在物理内存占用大小的简单计算 Android的Bitmap 是一个用于表示图像数据的核心类,代表一张图片在内存中的存储,Bitmap存储了图像的像素信息数据。 Bitmap把图像理解为像素点组成的二维矩阵&#xff…

力扣网编程55题:跳跃游戏之逆向思维

一. 简介 前面一篇文章使用贪心算法解决 力扣网55题:跳跃游戏,文章如下: 力扣网编程55题:跳跃游戏之贪心算法-CSDN博客 二. 力扣网编程55题:跳跃游戏之逆向思维 给你一个非负整数数组 nums ,你最初位于数…

苍穹外卖--day12数据统计-Excel报表

1.工作台1.1实现思路工作台是系统运营的数据看板,并提供快捷操作入口,可以有效提高商家的工作效率。工作台展示的数据:①今日数据②订单管理③菜品总览④套餐总览⑤订单信息名词解释:①营业额:已经完成订单的总金额②有…

鸿蒙应用开发:从网络获取数据

一、网络状态概述上述任一指标的变化均可视为网络状态的改变 二、获取网络信息 创建网络对象 //创建网络对象 //?表示可传可不传 connection.createNetConnection(netSpecifier?:NetSpecifier,timeout?:number):NetConnection;获取默认激活网络及其能力 //获取默认激活网络 …

探索开源虚拟 Excel 函数模块:Python 中的 Excel 功能利器

在数据处理和分析的领域中,Excel 一直是一款备受青睐的工具,它提供了丰富多样的函数,帮助用户高效地完成各种数据操作。而现在,我(董翔)开发一个基于 Python 的虚拟 Excel 函数模块,它将 Excel …

开源 vGPU 方案 HAMi: corememory 隔离测试

本文主要对开源的 vGPU 方案 HAMi 的 GPU Core&Memory 隔离功能进行测试。 省流: HAMi vGPU 方案提供的 Core&Memory 隔离基本符合预期: Core 隔离:Pod 能使用的算力会围绕设定值波动,但是一段时间内平均下来和申请的 g…

openstack安装并初始化

openstack安装并初始化openStack 概述OpenStack 起源什么是Openstackopenstack优势使用本地仓库离线安装系统基本环境设置为系统设置本地仓库创建openstack-train的仓库更新系统安装部署工具一键安装设置桥接网络通过 Dashboard 体验 OpenStack 功能创建云主机创建网络(1)用adm…

解决 Cannot create Swift scratch context

场景复现 Xcode 控制台输出: Cannot create Swift scratch context (couldnt create a Clang Importer)Analysis 分析 发生了什么? 在调试 Swift 代码或在 LLDB 里执行 po/expr 命令时,LLDB 需要为表达式临时创建一份 “Swift scratch co…

机械时代的计算

1、机械计算起源 最近在想平衡三进制的除法,想看看那么大牛是怎么做的,资料很少,但还是有的,有但是看不懂,也不知靠不靠谱,后面跟着实践了能行,下面就看看Balanced Ternary Arithmetic&#xff…

相机光学(四十八)——渐晕

1.什么是渐晕 渐晕,又称“光衰减”,在光学和摄影中很常见,简单来说就是与中心相比,图像角落变暗。渐晕要么是由光学引起的,要么是在后期处理中故意添加的,目的是将观看者的视线从角落的干扰物吸引到图像的中…

LabVIEW多通道阻抗测试仪

LabVIEW集成 Keysight 数字万用表与 NI 矩阵开关卡,构建多通道阻抗测试系统,实现设备连接电缆的多芯阻抗自动化测试,涵盖数据采集、分析、记录与显示功能,适用于高精度阻抗检测场景,展现LabVIEW在仪器控制与自动化测试…

MySQL的5.0和8.0版本区别

目录 1、MySQL版本-- 》5版本 1.1、InnoDB存储引擎 1.2、存储过程和触发器 1.3、视图 1.4、增强的查询优化器 1.5、增强的索引支持 1.6、外键支持 1.7、分区表和分布式查询 2、MySQL版本-- 》8版本 2.1、性能 2.2、字符编码改变 2.3、持久化保存 2.4、隐藏索引和降…

python实现简单的地图绘制与标记20250705

用python语言绘制显示范围不大于上海地区的地图 您的代码实现了一个 上海武馆地理信息系统,主要功能是通过可视化地图展示上海各区的传统武术馆信息。 通过和deeps对话一晚上实现的,我就是描述修改 高德的api key我搞了一会,平时很少接触密…

Qt开发:QListWidget的介绍和使用

文章目录 一、QListWidget的简介二、QListWidget的基本用法三、QListWidget的数据操作2.1 插入数据2.2 查找数据2.3 选项设置 四、QListWidget的信号与槽 一、QListWidget的简介 QListWidget 是 Qt 框架中用于显示和操作条目列表的控件,它是 QListView 的一个子类&a…

React Native 亲切的组件们(函数式组件/class组件)和陌生的样式

写多了taro, 看见react native中的组件好亲切啊,几乎一模一样。 一、函数式组件 — 常用 1)无状态,每次刷新都是生成一个新的状态 2)基于状态变化的管理 3)简洁,代码少,易于服用 import Reac…

Spring boot之身份验证和访问控制

本文笔记跟随于遇见狂神说老师的视频 一.SpringSecurity(安全) 1.相关概念 在web开发中,安全第一位,有简单的方法,比如:拦截器,过滤器 也有安全框架,比如:SpringSecu…