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 中设置服…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
