当前位置: 首页 > news >正文

Python网络爬虫基础

Python网络爬虫是一种自动化工具,用于从互联网上抓取信息。它通过模拟人类浏览网页的行为,自动地访问网站并提取所需的数据。网络爬虫在数据挖掘、搜索引擎优化、市场研究等多个领域都有广泛的应用。以下是Python网络爬虫的一些基本概念:

1. 发送请求 (Request)

使用 requests

requests 是一个非常流行的 HTTP 客户端库,使用简单且功能强大。

import requestsurl = 'https://example.com'
response = requests.get(url)
print(response.text)  # 打印网页内容
设置请求头 (Headers)

为了模拟浏览器行为,通常需要设置 User-Agent 和其他请求头。

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
response = requests.get(url, headers=headers)

2. 处理响应 (Response)

状态码 (Status Code)

检查响应的状态码以确保请求成功。

if response.status_code == 200:print('请求成功')
else:print(f'请求失败,状态码: {response.status_code}')
获取内容 (Content)

可以从响应对象中获取文本内容、二进制内容等。

html_content = response.text  # 获取文本内容
binary_content = response.content  # 获取二进制内容

3. 解析 HTML (Parsing)

使用 BeautifulSoup

BeautifulSoup 是一个强大的 HTML 解析库,可以方便地从 HTML 中提取数据。

from bs4 import BeautifulSoupsoup = BeautifulSoup(html_content, 'html.parser')
title = soup.title.string  # 获取标题
print(title)
使用 lxml

lxml 是另一个高效的 XML 和 HTML 解析库,支持 XPath 表达式。

from lxml import etreehtml = etree.HTML(html_content)
title = html.xpath('//title/text()')[0]  # 使用 XPath 获取标题
print(title)

4. 数据存储 (Storage)

写入文件

将提取的数据写入文件,例如 CSV 文件。

import csvdata = [['Name', 'Age'],['Alice', 30],['Bob', 25]
]with open('data.csv', 'w', newline='', encoding='utf-8') as file:writer = csv.writer(file)writer.writerows(data)
存储到数据库

将数据存储到关系型数据库(如 MySQL)或 NoSQL 数据库(如 MongoDB)。

import sqlite3# 连接到 SQLite 数据库
conn = sqlite3.connect('example.db')
cursor = conn.cursor()# 创建表
cursor.execute('''CREATE TABLE IF NOT EXISTS users (name TEXT, age INTEGER)''')# 插入数据
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Alice', 30))
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Bob', 25))# 提交事务
conn.commit()# 关闭连接
conn.close()

5. 用户代理 (User-Agent)

设置 User-Agent 可以模拟不同浏览器的行为,避免被网站识别为爬虫。

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
response = requests.get(url, headers=headers)

6. 遵守 Robots 协议

检查网站的 robots.txt 文件,确保爬虫行为符合网站的规定。

import requestsurl = 'https://example.com/robots.txt'
response = requests.get(url)
print(response.text)

7. 异常处理 (Error Handling)

处理网络请求中的各种异常,确保爬虫的稳定性。

try:response = requests.get(url, timeout=10)response.raise_for_status()  # 如果响应状态码不是 200,抛出异常
except requests.exceptions.RequestException as e:print(f'请求失败: {e}')

8. 反爬策略

设置请求间隔

避免频繁请求导致被封禁。

import timefor i in range(10):response = requests.get(url, headers=headers)# 处理响应time.sleep(1)  # 每次请求间隔 1 秒
使用代理 IP

使用代理 IP 可以绕过 IP 封禁。

proxies = {'http': 'http://123.45.67.89:8080','https': 'https://123.45.67.89:8080'
}
response = requests.get(url, headers=headers, proxies=proxies)

9. 法律与道德

尊重版权

不要侵犯他人的版权,合法使用数据。

保护隐私

不要收集和使用个人敏感信息,遵守相关法律法规。

合法用途

确保爬虫的用途是合法的,不用于非法活动。

总结

以上是 Python 网络爬虫的一些基本概念和技术细节。通过这些知识,你可以构建一个功能完善的网络爬虫。当然,实际应用中可能会遇到更多复杂的情况,需要不断学习和实践来提升技能。

相关文章:

Python网络爬虫基础

Python网络爬虫是一种自动化工具,用于从互联网上抓取信息。它通过模拟人类浏览网页的行为,自动地访问网站并提取所需的数据。网络爬虫在数据挖掘、搜索引擎优化、市场研究等多个领域都有广泛的应用。以下是Python网络爬虫的一些基本概念: 1.…...

每天五分钟机器学习:支持向量机数学基础之超平面分离定理

本文重点 超平面分离定理(Separating Hyperplane Theorem)是数学和机器学习领域中的一个重要概念,特别是在凸集理论和最优化理论中有着广泛的应用。该定理表明,在特定的条件下,两个不相交的凸集总可以用一个超平面进行分离。 定义与表述 超平面分离定理(Separating Hy…...

TCP/IP网络协议栈

TCP/IP网络协议栈是一个分层的网络模型,用于在互联网和其他网络中传输数据。它由几个关键的协议层组成,每一层负责特定的功能。以下是对TCP/IP协议栈的简要介绍: TCP/IP协议模型的分层 1. 应用层(Application Layer)…...

利用编程思维做题之最小堆选出最大的前10个整数

1. 理解问题 我们需要设计一个程序,读取 80,000 个无序的整数,并将它们存储在顺序表(数组)中。然后从这些整数中选出最大的前 10 个整数,并打印它们。要求我们使用时间复杂度最低的算法。 由于数据量很大,直…...

详解MVC架构与三层架构以及DO、VO、DTO、BO、PO | SpringBoot基础概念

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 今天毛毛张分享的是SpeingBoot框架学习中的一些基础概念性的东西:MVC结构、三层架构、POJO、Entity、PO、VO、DO、BO、DTO、DAO 文章目录 1.架构1.1 基本…...

Unity C# 影响性能的坑点

c用的时间长了怕unity的坑忘了&#xff0c;记录一下。 GetComponent最好使用GetComponent<T>()的形式&#xff0c; 继承自Monobehaviour的函数要避免空的Awake()、Start()、Update()、FixedUpdate().这些空回调会造成性能浪费 GetComponent方法最好避免在Update当中使用…...

工作学习:切换git账号

概括 最近工作用的git账号下发下来了&#xff0c;需要切换一下使用的账号。因为是第一次弄&#xff0c;不熟悉&#xff0c;现在记录一下。 打开设置 路径–git—git remotes&#xff0c;我这里选择项是Manage Remotes&#xff0c;点进去就可以了。 之后会出现一个输入框&am…...

量化交易系统开发-实时行情自动化交易-8.量化交易服务平台(一)

19年创业做过一年的量化交易但没有成功&#xff0c;作为交易系统的开发人员积累了一些经验&#xff0c;最近想重新研究交易系统&#xff0c;一边整理一边写出来一些思考供大家参考&#xff0c;也希望跟做量化的朋友有更多的交流和合作。 接下来会对于收集整理的33个量化交易服…...

Scala习题

姓名&#xff0c;语文&#xff0c;数学&#xff0c;英语 张伟&#xff0c;87&#xff0c;92&#xff0c;88 李娜&#xff0c;90&#xff0c;85&#xff0c;95 王强&#xff0c;78&#xff0c;90&#xff0c;82 赵敏&#xff0c;92&#xff0c;88&#xff0c;91 孙涛&#xff0c…...

结构方程模型(SEM)入门到精通:lavaan VS piecewiseSEM、全局估计/局域估计;潜变量分析、复合变量分析、贝叶斯SEM在生态学领域应用

目录 第一章 夯实基础 R/Rstudio简介及入门 第二章 结构方程模型&#xff08;SEM&#xff09;介绍 第三章 R语言SEM分析入门&#xff1a;lavaan VS piecewiseSEM 第四章 SEM全局估计&#xff08;lavaan&#xff09;在生态学领域高阶应用 第五章 SEM潜变量分析在生态学领域…...

OpenCV图像基础处理:通道分离与灰度转换

在计算机视觉处理中&#xff0c;理解图像的颜色通道和灰度表示是非常重要的基础知识。今天我们通过Python和OpenCV来探索图像的基本组成。 ## 1. 图像的基本组成 在数字图像处理中&#xff0c;彩色图像通常由三个基本颜色通道组成&#xff1a; - 蓝色&#xff08;Blue&#x…...

C++ 类和对象(类型转换、static成员)

目录 一、前言 二、正文 1.隐式类型转换 1.1隐式类型转换的使用 2.static成员 2.1 static 成员的使用 2.1.1static修辞成员变量 2.1.2 static修辞成员函数 三、结语 一、前言 大家好&#xff0c;我们又见面了。昨天我们已经分享了初始化列表&#xff1a;https://blog.c…...

【网络安全设备系列】12、态势感知

0x00 定义&#xff1a; 态势感知&#xff08;Situation Awareness&#xff0c;SA&#xff09;能够检测出超过20大类的云上安全风险&#xff0c;包括DDoS攻击、暴力破解、Web攻击、后门木马、僵尸主机、异常行为、漏洞攻击、命令与控制等。利用大数据分析技术&#xff0c;态势感…...

Linux介绍与安装指南:从入门到精通

1. Linux简介 1.1 什么是Linux&#xff1f; Linux是一种基于Unix的操作系统&#xff0c;由Linus Torvalds于1991年首次发布。Linux的核心&#xff08;Kernel&#xff09;是开源的&#xff0c;允许任何人自由使用、修改和分发。Linux操作系统通常包括Linux内核、GNU工具集、图…...

BGE-M3模型结合Milvus向量数据库强强联合实现混合检索

在基于生成式人工智能的应用开发中&#xff0c;通过关键词或语义匹配的方式对用户提问意图进行识别是一个很重要的步骤&#xff0c;因为识别的精准与否会影响后续大语言模型能否检索出合适的内容作为推理的上下文信息&#xff08;或选择合适的工具&#xff09;以给出用户最符合…...

鸿蒙NEXT开发案例:文字转拼音

【引言】 在鸿蒙NEXT开发中&#xff0c;文字转拼音是一个常见的需求&#xff0c;本文将介绍如何利用鸿蒙系统和pinyin-pro库实现文字转拼音的功能。 【环境准备】 • 操作系统&#xff1a;Windows 10 • 开发工具&#xff1a;DevEco Studio NEXT Beta1 Build Version: 5.0.…...

CTF之密码学(栅栏加密)

栅栏密码是古典密码的一种&#xff0c;其原理是将一组要加密的明文划分为n个一组&#xff08;n通常根据加密需求确定&#xff0c;且一般不会太大&#xff0c;以保证密码的复杂性和安全性&#xff09;&#xff0c;然后取每个组的第一个字符&#xff08;有时也涉及取其他位置的字…...

修改插槽样式,el-input 插槽 append 的样式

需缩少插槽 append 的 宽度 方法1、使用内联样式直接修改&#xff0c;指定 width 为 30px <el-input v-model"props.applyBasicInfo.outerApplyId" :disabled"props.operateCommandType input-modify"><template #append><el-button click…...

UPLOAD LABS | PASS 01 - 绕过前端 JS 限制

关注这个靶场的其它相关笔记&#xff1a;UPLOAD LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 本关的目标是上传一个 WebShell 到目标服务器上&#xff0c;并成功访问&#xff1a; 我们直接尝试上传后缀为 .php 的一句话木马&#xff1a; 如上&#xff0c;靶场弹…...

【css实现收货地址下边的平行四边形彩色线条】

废话不多说&#xff0c;直接上代码&#xff1a; <div class"address-block" ><!-- 其他内容... --><div class"checked-ar"></div> </div> .address-block{height:120px;position: relative;overflow: hidden;width: 500p…...

基于Vue 3与Express的私有化ChatGPT Web客户端部署指南

1. 项目概述与核心价值最近在折腾一个自用的AI对话工具&#xff0c;核心需求很简单&#xff1a;想在一个自己完全掌控的界面上&#xff0c;方便地使用大语言模型&#xff0c;比如ChatGPT的API。市面上虽然有很多现成的网页应用&#xff0c;但要么功能太臃肿&#xff0c;要么部署…...

搜搜果:一种面向AI生成内容验真与品牌可见度监测的实现方案

1. 问题定义 随着大语言模型&#xff08;LLM&#xff09;广泛集成到搜索、问答、推荐等场景中&#xff0c;出现两个可观测的问题&#xff1a; 内容可信性问题&#xff1a;模型会以高置信度输出事实上不存在的实体、事件或引用&#xff08;幻觉&#xff0c;hallucination&#…...

uni-app iOS后台运行 uni-app App如何实现后台定位或音乐播放

iOS上uni.startBackgroundTask基本无效&#xff0c;仅音频播放、定位更新、后台数据刷新三类能力合规&#xff1b;后台定位需manifest声明原生权限地理围栏事件&#xff1b;无声音频保活须onLaunch配置AudioSession并延迟播放。uni.startBackgroundTask 在 iOS 上基本无效&…...

STM32F407上电后第一行代码:手把手带你读懂启动文件startup_stm32f407xx.s

STM32F407启动文件深度解析&#xff1a;从复位到main()的底层之旅 当你第一次打开STM32的MDK工程时&#xff0c;那个神秘的.s文件是否曾让你望而却步&#xff1f;作为连接硬件与C语言世界的桥梁&#xff0c;启动文件&#xff08;startup_stm32f407xx.s&#xff09;完成了从芯片…...

点云成像三维焊缝识别与机器人跟踪【附代码】

✨ 长期致力于点云成像、焊缝识别定位、机器人、点云拼接、焊缝轨迹跟踪研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;基于圆柱体拟合与ICP拼接的点云…...

JSON数据同步利器:深度解析ogre-software/json-synchronizer的核心原理与应用

1. 项目概述&#xff1a;一个被低估的JSON数据同步利器如果你经常和JSON数据打交道&#xff0c;尤其是在前后端分离、微服务架构或者多数据源集成的场景下&#xff0c;你肯定遇到过这样的烦恼&#xff1a;手头有两份甚至多份JSON数据&#xff0c;它们结构相似&#xff0c;但内容…...

从无人机到平衡车:MPU6050姿态融合(互补滤波)的实战调参指南与避坑心得

从无人机到平衡车&#xff1a;MPU6050姿态融合实战调参与避坑指南 姿态解算在无人机飞控、平衡车和机器人系统中扮演着核心角色。MPU6050作为一款集成了三轴陀螺仪和三轴加速度计的惯性测量单元(IMU)&#xff0c;其数据融合质量直接决定了系统稳定性。许多开发者虽然理解了互补…...

JS 侦探社:如何精准判断一个对象是不是数组?

&#x1f575;️‍♂️ JS 侦探社&#xff1a;如何精准判断一个对象是不是数组&#xff1f; &#x1f914; 为什么判断数组这么难&#xff1f; 在 JavaScript 中&#xff0c;数组本质上也是一种对象。 console.log(typeof []); // "object" console.log(typeof {}…...

League Akari:3步打造你的英雄联盟智能游戏助手,告别繁琐操作

League Akari&#xff1a;3步打造你的英雄联盟智能游戏助手&#xff0c;告别繁琐操作 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League A…...

通信行业硅转向:从专用ASIC到软件定义网络的架构演进

1. 项目概述&#xff1a;通信行业的硅转向 如果你在2016年前后关注过通信设备行业&#xff0c;尤其是那些做核心路由器、骨干网交换机的“大厂”&#xff0c;你大概能感受到一种山雨欲来的氛围。当时&#xff0c;一篇来自EE Times的报道&#xff0c;标题是“Silicon Shift Ahea…...