学习Python的第一天之网络爬虫

news2025/7/19 9:51:51

30岁程序员学习Python的第一天:网络爬虫

Requests库

1、requests库安装

windows系统通过管理员打开cmd,运行pip install requests!

在这里插入图片描述
测试案例:
在这里插入图片描述

2、Requests库的两个重要对象

Response对象
 Resoponse对象包含服务器返回的所有信息,也包含请求的Resquest信息
 r.status_code               HTTP请求的返回状态,200表示连接成功,404表示失败
 r.text                            HTTP相应内容的字符串形式,即,url对应的页面内容
 r.encoding                   从HTTP header中猜测的响应内容编码方式
 r.apparent_encoding  从内容中分析出的响应内容编码方式(备选编码方式)
 r.content                     HTTP响应内容的二进制形式

 r.status_code:   200 表示成功     404或其他  表示某些原因产生的异常
 r.encoding:如果header中不存在charset,则认为编码为ISO-8859-1,r.text根据r.encoding显示网页内容
 r.apparent_encoding:根据网页内容分析出的编码方式,可以看作是r.encoding的备选。
 Request对象

3、Requests库的异常

在这里插入图片描述
r.raise_for_status(): 如果不是200,产生异常requests.HTTPError
该方法在方法内部判断r.status_code是否等于200,不需要增加额外的if语句,该语句便于利用try_except进行异常处理

import requests  
  
def getHTMLText(url):  
    try:  
        r = requests.get(url)  
        r.raise_for_status()  #如果状态不是200,引发HTTPError异常  
        r.encoding = r.apparent_encoding  
        return r.text  
    except:  
        return "产生异常"  
  
if __name__ == '__main__':  
    url = "http://www.baidu.com"  
    print(getHTMLText(url))

4、Requests库的7个主要方法

在这里插入图片描述
此7个方法与HTTP协议中的方法一致。

>>> import requests
>>> r = requests.head('http://httpbin.org/get')
>>> r.headers
{'Date': 'Tue, 06 May 2025 00:29:49 GMT', 'Content-Type': 'application/json', 'Content-Length': '307', 'Connection': 'keep-alive', 'Server': 'gunicorn/19.9.0', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true'}
>>> r.text

>>> payload = {'key1':'value1','key2':'value2'}
>>> r = requests.post('http://httpbin.org/post',data=payload)
>>> print(r.text)
{
  ...
  "data": "",
  "form": {
    "key1": "value1",
    "key2": "value2"
  },
  ...
}

>>> r = requests.post('http://httpbin.org/post',data='ABD')
>>> print(r.text)
{
  ...
  "data": "ABD",
  "form": {},
  ...
}

>>> payload = {'key1':'value1','key2':'value2'}
>>> r = requests.put('http://httpbin.org/put',data=payload)
>>> print(r.text)
{
  ...
  "data": "",
  "form": {
    "key1": "value1",
    "key2": "value2"
  },
  ...
}

requests.request(method,url,** kwargs)
method: 请求方式,对应get/put/post等7种
url: 拟获取页面的url链接
** kwargs: 控制访问的参数,共13个,可以是字典或字节序列,文件对象等

** kwargs: 控制访问的参数,均为可选项
params : 字典或字节序列,作为参数增加到url中
data : 字典、字节序列或文件对象,作为request的内容
json : JSON格式的数据,作为Request的内容
headers : 字典,HTTP定制头
cookies : 字典或Cookiejar,Request中的cookie
auth : 元组,支持HTTP认证功能
files : 字典类型,传输文件
timeout : 设定超时时间,单位为秒
proxies : 字典类型,设定访问代理服务器,可以增加登录认证
allow_redirects : True/False,默认为True,重定向开关
stream : True/False,默认True,获取内容立即下载开关
verity : True/False,默认True,认证SSL证书开关
cert : 本地SSL证书路径

网络爬虫引发的问题

1、性能骚扰:Web服务器默认接受人类访问,编程水平和目录,网络爬虫容易给Web服务器带来巨大的资源开销。
2、法律风险:服务器上的数据有产权归属、获取数据后牟利将触犯法律。
3、隐私泄露:爬虫可能具备突破简单访问控制的能力,获得被保护的数据,从而泄露个人隐私。

网络爬虫的限制

来源审查:判断User-Agent进行限制
检查来访HTTP协议头的User-Agent域,只响应浏览器或者友好爬虫的访问。
发布公告:Robots协议
告知所有爬虫网站的爬取策略,要求爬虫遵守。

Robots协议(Robots Exclusion Standard)
网站告知网路爬虫那些页面可以抓取、那些不行,基本放置在网站根目录下robots.txt文件。
百度网站robots协议:

User-agent: Baiduspider
Disallow: /baidu
Disallow: /s?
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
Disallow: /bh

User-agent: Googlebot
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
Disallow: /bh

User-agent: MSNBot
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
Disallow: /bh
...

Robots协议可通过自动或人工识别robots.txt,再进行内容爬取。
Robots协议是建议但非约束性,网络爬虫可以不遵守,但存在法律风险。

爬取实例

爬取京东商品

import requests  
url = "https://item.jd.com/100038004353.html"  
try:  
    r = requests.get(url)  
    r.raise_for_status()  
    r = encodings = r.apparent_encoding  
    print(r.text[:1000])  
except:  
    print("爬取失败")

在这里插入图片描述

爬取亚马逊商品

import requests  
  
url = "https://www.amazon.cn/gp/product/B01M8L5Z3Y"  
try:  
    r = requests.get(url)  
    print(r.request.headers)  
    kv = {'user-agent':'Mozilla/5.0'}  
    r = requests.get(url,headers = kv)  
    print(r.request.headers)  
    print(r.status_code)  
    r.encodings = r.apparent_encoding  
    print(r.text[1000:2000])  
except:  
    print('爬取失败')

在这里插入图片描述

通过搜索引擎关键字爬取数据

import requests  
  
url = "http://www.baidu.com/s"  
try:  
    kv = {'wd':'Python'}  
    r = requests.get(url,params = kv)  
    r.raise_for_status()  
    r.encodings = r.apparent_encoding  
    print(r.url)  
    print(len(r.text))  
except:  
    print('爬取失败')

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux下的Redis的编译安装与配置

配合做开发经常会用到redis,整理下编译安装配置过程,仅供参考! --------------------------------------Redis的安装与配置-------------------------------------- 下载 wget https://download.redis.io/releases/redis-6.2.6.tar.gz tar…

无人机相关技术与故障排除笔记

无人机相关技术与故障排除笔记 本文档整理了关于无人机电调、电机、通信协议、传感器以及硬件故障排除相关的笔记和解释。 1. 电调 (ESC) PWM 输出初始化设置 初始化电调(电子调速器)的 PWM 输出功能时,设置 频率 400Hz、分辨率 10000、初…

SpringSecurity(自定义异常处理)

文末有本篇文章的项目源码可供下载学习。 在实际的项目开发过程中,我们对于认证失败或者授权失败需要像接口一样返回相同结构的json数据,这样可以让前端对响应进行统一的处理。要实现这个功能我们需要知道SpringSecurity的异常处理机制。 在SpringSecu…

Java——反射

目录 5 反射 5 反射 类信息:方法、变量、构造器、继承和实现的类或接口。反射:反射是 Java 中一项强大的特性,它赋予了程序在运行时动态获取类的信息,并能够调用类的方法、访问类的字段以及操作构造函数等的能力。通过反射&#…

本地玩AI绘画 | StableDiffusion安装到绘画

环境须知 Cuda必须安装 不需要安装Python,因为该项目会自动安装Python3.10的虚拟环境 1.下载StableDiffusionWebUI压缩包并解压 下载方式一: 从Github下载https://github.com/AUTOMATIC1111/stable-diffusion-webui 的压缩包,解压后名为…

project从入门到精通(四)

目录 日程表的设置和妙用 为日程表视图添加任务 用日程表视图的好处 ​编辑 查找任务的前置任务和后续任务 方法1:采用复合视图的方式 方法3:关系图法 方法4:通过任务路径的方式检查所选任务的前置任务 前置任务和驱动前置任务的区…

git项目迁移,包括所有的提交记录和分支 gitlab迁移到gitblit

之前git都是全新项目上传,没有迁移过,因为迁移的话要考虑已有项目上的分支都要迁移过去,提交记录能迁移就好;分支如果按照全新项目上传的方式需要新git手动创建好老git已有分支,在手动一个一个克隆老项目分支代码依次提…

港大今年开源了哪些SLAM算法?

过去的5个月,香港大学 MaRS 实验室陆续开源了四套面向无人机的在线 SLAM 框架:**FAST-LIVO2 、Point-LIO(grid-map 分支) 、Voxel-SLAM 、Swarm-LIO2 **。这四套框架覆盖了单机三传感器融合、高带宽高速机动、长时间多级地图优化以…

Godot4.3类星露谷游戏开发之【昼夜循环】

千里之行,始于足下 文章目录 零、 笔记一、创造时间二、产生颜色三、搭建测试环境四、测试五、免费开源资产包 零、 笔记 为了让游戏可以拥有白天和黑夜,我们需要像上帝一样,在游戏中创造时间的规则,并在不同的时间点产生不同的颜…

修复笔记:获取 torch._dynamo 的详细日志信息

一、问题描述 在运行项目时,遇到与 torch._dynamo 相关的报错,并且希望获取更详细的日志信息以便于进一步诊断问题。 二、相关环境变量设置 通过设置环境变量,可以获得更详细的日志信息: set TORCH_LOGSdynamo set TORCHDYNAM…

Windows平台下的Qt发布版程序打包成exe可执行文件(带图标)|Qt|C++

首先先找一个可执行文件的图标 可以去阿里的矢量图库里找 iconfont-阿里巴巴矢量图标库 找到想要的图标下载下来 此时的图标是png格式的,我们要转到icon格式的文件 要使用到一个工具Drop Icons_2.1.1.rar - 蓝奏云 生成icon文件后把icon文件放到你项目的根目录下…

CSS--图片链接垂直居中展示的方法

原文网址&#xff1a;CSS--图片链接垂直居中展示的方法-CSDN博客 简介 本文介绍CSS图片链接垂直居中展示的方法。 图片链接 问题复现 源码 <html xml:lang"cn" lang"cn"><head><meta http-equiv"Content-Type" content&quo…

TRAE 配置blender MCP AI自动3D建模

BlenderMCP - Blender模型上下文协议集成 BlenderMCP通过模型上下文协议(MCP)将Blender连接到Claude AI&#xff0c;允许Claude直接与Blender交互并控制Blender。这种集成实现了即时辅助的3D建模、场景创建和操纵。 1.第一步下载 MCP插件(addon.py):Blender插件&#xff0c;在…

VUE2课程计划表练习

主要练习数据变量对象 以下是修正后的完整代码&#xff1a; //javascript export default {data() {return {list: [{ id: 1, subject: Vue.js 前端实战开发, content: 学习指令&#xff0c;例如 v-if、v-for、v-model 等, place: 自习室, status: false }// 可以在这里添加更…

2025年软件工程与数据挖掘国际会议(SEDM 2025)

2025 International Conference on Software Engineering and Data Mining 一、大会信息 会议简称&#xff1a;SEDM 2025 大会地点&#xff1a;中国太原 收录检索&#xff1a;提交Ei Compendex,CPCI,CNKI,Google Scholar等 二、会议简介 2025年软件开发与数据挖掘国际会议于…

.NET高频技术点(持续更新中)

1. .NET 框架概述 .NET 框架的发展历程.NET Core 与 .NET Framework 的区别.NET 5 及后续版本的统一平台 2. C# 语言特性 异步编程&#xff08;async/await&#xff09;LINQ&#xff08;Language Integrated Query&#xff09;泛型与集合委托与事件属性与索引器 3. ASP.NET…

pandas中的数据聚合函数:`pivot_table` 和 `groupby`有啥不同?

pivot_table 和 groupby 是 pandas 中两种常用的数据聚合方法&#xff0c;它们都能实现数据分组和汇总&#xff0c;但在使用方式和输出结构上有显著区别。 0. 基本介绍 groupby分组聚合 groupby 是 Pandas 库中的一个功能强大的方法&#xff0c;用于根据一个或多个列对数据进…

对golang中CSP的理解

概念&#xff1a; CSP模型&#xff0c;即通信顺序进程模型&#xff0c;是由英国计算机科学家C.A.R. Hoare于1978年提出的。该模型强调进程之间通过通道&#xff08;channel&#xff09;进行通信&#xff0c;并通过消息传递来协调并发执行的进程。CSP模型的核心思想是“不要通过…

【LunarVim】CMake LSP配置

在 LunarVim 中为 CMakeLists.txt 文件启用代码提示&#xff08;如补全和语义高亮&#xff09;&#xff0c;需要安装支持 CMake 的 LSP&#xff08;语言服务器&#xff09;和适当的插件。以下是完整配置指南&#xff1a; 1、配置流程 1.1 安装cmake-language-server 通过 Ma…

Mkdocs页面如何嵌入PDF

嵌入PDF 嵌入PDF代码 &#xff0c;注意PDF的相对地址 <iframe src"../个人简历.pdf (相对地址)" width"100%" height"800px" style"border: 1px solid #ccc; overflow: auto;"></iframe>我的完整代码&#xff1a; <d…