python 爬虫 入门 一、基础工具
目录
一,网页开发者工具的使用
二、通过python发送请求
(一)、get
(二)、带参数的get
(三)、post
后续:数据解析
一,网页开发者工具的使用
我们可以用 requests 库来从一个url或者说一个网址来爬取资源,这里以百度主页和windows初始浏览器Microsoft Edge为例,我们进入百度主页后按F12进入开发者模式,我们常用的功能是元素和网络,源代码除了反爬反加密外很少用。元素显示的是当前页面的实时代码,网络则是能看到打开工具后当前网页的所有请求。
在弹出的开发者界面中选择网络,然后刷新一下页面,可以看到工具抓取了很多请求,我们选中第一个请求。其中,标头就是网络传输时,http协议规定的格式。
常规里包含了目标url,请求方法,是我们着重需要看的地方。请求标头中要注意的有Cookie、Referer、User-Agent。Cookie主要用于管理登录状态、验证自动登录,在一些登录的地方需要使用,Referer指从哪个网址发起请求的,可能和反爬有关。User-Agent则是表示了请求是从什么设备(操作系统,浏览器信息)发出的,一些网站会验证设备信息反爬。
响应就是服务器对这回请求发送的回信,往往就是我们需要的数据。预览是返回数据的可视化,一般如网页、图片或者代码就能显示预览。
很多请求还具有负载,其实就是get请求时附带的参数或者post请求附带的数据。
二、通过python发送请求
常见的请求方式有get和post,其中,get是向服务器请求资源,一般的访问资源都是get。post会向服务器提交数据,像是百度翻译的待翻译文本提交就是post。而向一个网页提出请求是用get还是post具体就看上面标头中的请求方法。
(一)、get
现在我们就试试下载百度主页吧。
import requestsurl = "https://www.baidu.com"
headers = {# 用户代理,某些网站验证用户代理,微微改一下,如果提示要验证码之类的,使用它"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome""/118.0.0.0 Safari/537.36",
}
with requests.get(url=url,headers=headers) as resp:resp.encoding = "utf-8" # 当页面乱码改这里print(resp)with open("baidu.html", mode="w", encoding="utf-8") as f: # 下载源码f.write(resp.text)
不加 headers也是可以的,但请求到的东西会有差异,某些网站甚至会无视请求或者要求验证码,因为python默认的headers如下,相当于告诉网站我是python。
with作用是执行完毕后自动执行resp.close()关闭链接
下载文件结果如下,没有百度图片是因为图片在其他请求中获得。
(二)、带参数的get
接下来我们试试下载这个网页:(为什么不用百度,因为百度搜出来第二条结果过不了审,而且搜狗参数少点,但原理一样)
通过开发者工具,我们发现,这个网页还是get请求,但是url特别长
不过不要被吓到了,打开负载页面,比对一下,你就会发现这些都相当于是附带的参数,只是格式和编码原因看起来有点乱。上面的 query=i%E9%81%93i 其实就是utf-8编码下的 query=i道i 。
对于这种情况,我们可以直接将url修改为这回请求的url(可以适当裁剪,只保留关键信息),或者采用下面的方法:
import requestsurl = "http://www.sogou.com/web"
headers = {# 用户代理,某些网站验证用户代理,微微改一下,如果提示要验证码之类的,使用它"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0",
}
params = {"query": "i道i"
}
with requests.get(url=url, headers=headers, params=params) as resp:resp.encoding = "utf-8" # 当页面乱码改这里print(resp)print(resp.text)with open("sogou.html", mode="w", encoding="utf-8") as f: # 下载源码f.write(resp.text)
下面是显示的结果,看起来像是只有内容,失去了格式,这是因为搜狗网页html源代码就是这样的,网页除了html源代码以外,还能通过诸如css js脚本 等来动态的显示格式,所以,我们有时候在页面能看见的东西,使用ctrl+u查看页面源代码时却看不见,因为这些东西是后面通过js发送的其他请求动态添加到页面的。
(三)、post
许多需要向服务器提交数据的行为,比如上传文件,论坛发帖等都是要post请求来修改服务器数据。这里就拿百度翻译为例子。百度翻译网页打开时,发送的请求是get请求,但提交待翻译文本时用的时post请求(只用于练手,请勿商用,请勿过多访问)
直接获取右面翻译结果有些太难了,不亚于泼猴去梅山,这里走条捷径,顺着需要翻译的字一划,能开启划译功能
从抓包工具中能看到多了两条请求,我们看transapi的负载和响应:
可以看出,这条就是我们需要的请求响应中["data"][0]["dst"],所以,我们通过以下python代码就可以获得百度翻译的结果:
import requestsurl = "https://fanyi.baidu.com/transapi"
headers = {# 用户代理,某些网站验证用户代理,微微改一下,如果提示要验证码之类的,使用它"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0",
}
params = {"query": "i道i","from": "zh","to": "en","source": "txt",
}
with requests.post(url=url, headers=headers, params=params) as resp:resp.encoding = "utf-8"print(resp)print(eval(resp.text)["data"][0]["dst"])
注意,这里post返回的resp.text是str,你可以使用eval或者resp.json()来转字典。这样我们就获取到结果了。
后续:数据解析
改天写数据解析的三种工具:正则、bs4、xpath,详情见二、数据解析
相关文章:

python 爬虫 入门 一、基础工具
目录 一,网页开发者工具的使用 二、通过python发送请求 (一)、get (二)、带参数的get (三)、post 后续:数据解析 一,网页开发者工具的使用 我们可以用 requests 库…...
金融衍生品中的风险对冲策略分析
金融衍生品是现代金融市场中不可或缺的一部分,它们通过标的资产的价格波动为投资者提供了多样的风险管理工具。随着市场的不确定性和复杂性增加,风险对冲成为企业和个人投资者的首要任务。本文将深入探讨金融衍生品中的常见风险对冲策略,分析…...

linux下建立软链接
深度学习训练中经常会遇到数据量庞大或者工程中模型报错太多导致磁盘空间不够,但是又不想修改原来在代码中写的路径,这个时候制作软连接很有作用,把占用量大的目录移到别的空闲磁盘,然后在原来的目录做一个软连接指向那个移到的空…...
MySql数据库left join中添加子查询
user表查询出数据列表(多条,如id)左连接到order表中的order_agent_id字段,并通过 order_agent_id分组,求和user_order_partner,使用COALESCE()聚合函数对未获取到和值的进行默认赋值,防止查询不…...
redis--过期策略和内存淘汰策略
redis过期策略 1、惰性删除 当客户端尝试访问某个键时,Redis会先检查该键是否设置了过期时间,并判断是否过期。 如果键已过期,则Redis会立即将其删除。这就是惰性删除。 总结:该策略可以最大化的节省CPU资源,却对内存非…...

qt QTableview 左侧 序号 倒序
本文主要在QTableview插入数据的基础上,使左边序号实现倒序,实现如下图所示。 解决办法: QTableview左侧是QHeaderView类构成的,重写QHeaderView的paintSection, 重写序号的文字内容,进而 实现QTableview …...

隧道代理IP如何帮助企业采集数据?
在数字化时代,数据已成为企业决策的重要基石。无论是市场调研、竞品分析,还是用户行为研究,高质量的数据采集都是企业成功的关键。然而,面对复杂的网络环境和日益严格的反爬虫机制,如何高效、稳定地采集数据成为了一个…...

Spring Boot知识管理系统:技术与方法论
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常适…...

SpringBoot1~~~
目录 快速入门 依赖管理和自动配置 修改自动仲裁/默认版本号 starter场景启动器 自动配置 修改默认扫描包结构 修改默认配置 读取application.properties文件 按需加载原则 容器功能 Configuration Import 编辑 Conditional ImportResource 配置绑定Configur…...

兼容多家品牌手机的多协议取电快充芯片
随着智能手机的普及和功能不断的增强,电池续航能力成为了用户关注的焦点,为了解决这各问题各大手机厂商推出了手机快充技术,快充协议是快充技术的核心,每家品牌手机都有自己的独家快充协议,如FCP/SCP协议是华为手机的独…...
Java和Python的不同
1. 语法差异 Java: - Java是一种强类型语言,要求在编译时明确变量的数据类型。 - Java代码块由大括号 {} 包围,如方法体、循环和条件语句。 - Java使用分号 ; 作为语句的结束符。 public class HelloWorld {public static void main(String[] args) {S…...

Moshang摩熵医药数据库
摩熵医药数据库是摩熵数科信息公司旗下的一个核心产品,专注于为医药行业提供全面的数据支持和决策服务。该医药数据库整合了中、美、欧、日等全球七十多个主流国家的数10万数据信息源,其中收载的50亿数据体系的覆盖了生物医药全生命周期数据和精细化工全…...

基于web的酒店客房管理系统【附源码】
基于web的酒店客房管理系统(源码L文说明文档) 目录 4 系统设计 4.1 系统概述 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细实现 5.1 用户信息管理 5.2 会员信息管理 5.3 客房信息管理 5.…...

潜水定位通信系统的功能和使用方法_鼎跃安全
潜水定位通信系统是保障潜水安全与作业高效的关键设备。它利用先进的声呐、无线电等技术,可精准定位潜水员位置。在水下能实现潜水员之间以及与水面的双向通信,确保信息及时传递。具备高可靠性和稳定性,即使在复杂水环境中也能正常运行。 一、…...

Golang | Leetcode Golang题解之第477题汉明距离总和
题目: 题解: func totalHammingDistance(nums []int) (ans int) {n : len(nums)for i : 0; i < 30; i {c : 0for _, val : range nums {c val >> i & 1}ans c * (n - c)}return }...

JavaWeb——Maven(1/8):整体介绍(什么是Maven、Maven的作用、小结)
目录 什么是Maven Maven的作用 依赖管理 统一项目结构 项目构建 小结 Web前端开发的知识了解完毕后,接下来要进入后端Web开发的学习,这一部分的内容是学习的重点。在这一部分内容中,首先要了解 Java 项目的构建工具 Maven。 首先先来介…...

Vivado 跟Xilinx SAE学HLS系列-高亚军(复合数据类型)
文章目录 目录 文章目录 Struct元素优化 枚举 ENUMERATED TYPE 希望能为你提供更多的创造力。 Struct元素优化 在对应的结构体变量--directive里面使用field_level或者struct_level进行优化. 4 4 4 4 4-------8 8 8 8 8 20-24; 查看波形--查看实际的分配情况 枚举 ENUMERATED …...
【mysql】WITH AS 语法详解
【mysql】WITH AS 语法详解 【一】WITH AS语法的基本结构【二】案例1【三】案例2 WITH AS 语法是MySQL中的一种临时结果集,它可以在SELECT、INSERT、UPDATE或DELETE语句中使用。通过使用WITH AS语句,可以将一个查询的结果存储在一个临时表中,…...
Rocky linux SSD安装
1. 下载ISO文件 Index of /vault/rocky/9.3/isos/x86_64/ 下载DVD iso 2.使用RUFUS制作启动盘,注意UEFI选项 Rufus - 轻松创建 USB 启动盘 3. 重启,F2进bios,选择U盘启动安装 4. 选择安装盘 5. 设置用户密码,用户名默认root 其他&#x…...
在 Linux 系统中设置 Service 服务开机自启的详细指南
目录 在 Linux 系统中设置 Service 服务开机自启的详细指南一、Linux 服务管理概述二、systemd 中设置服务开机自启2.1 systemd 介绍2.2 如何检查服务的状态2.3 启用服务开机自启2.4 手动启动和停止服务2.5 检查服务是否成功启用2.6 禁用开机自启服务 三、在 sysvinit 中设置服…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...