爬虫之爬虫介绍、requests模块、携带请求参数、url 编码和解码、携带请求头
爬虫介绍
爬虫是什么?
- 网页蜘蛛,网络机器人,spider
- 在互联网中 通过 程序 自动的抓取数据 的过程
- 根上:使用程序 模拟发送http请求 ⇢ \dashrightarrow ⇢ 得到http响应 ⇢ \dashrightarrow ⇢ 把响应的数据解析出来 ⇢ \dashrightarrow ⇢ 存储起来
做爬虫需要掌握的技术
- web端爬虫(网页)
- 抓包:抓包工具 ⇢ \dashrightarrow ⇢ 浏览器,charles,fiddler
- 发送http请求的模块
- requests:同步的 ⇢ \dashrightarrow ⇢ 不仅仅做爬虫用 调用第三方api就可以使用
- request-html:
- aiohttp:异步的http模块
- 解析库:http响应 ⇢ \dashrightarrow ⇢ 可能是xml,html,json,文件,图片… ⇢ \dashrightarrow ⇢ 响应中解析出想要的数据
- beautifulsoup4 ⇢ \dashrightarrow ⇢ xml/html
- lxml ⇢ \dashrightarrow ⇢ xml/html
- selenium ⇢ \dashrightarrow ⇢ 请求加解析(本质是模拟浏览器)
- json
- 存储:mysql,redis,es,mongodb…
- pymysql:aiomysql
- redis:aioredis
- elasticsearch.py
- py-mongo
- 移动端爬虫(app)
- 抓包,发请求,解析,存储跟web一样的
- 对app进行反编译 ⇢ \dashrightarrow ⇢ jadx
- 安卓:java写的app ⇢ \dashrightarrow ⇢ 把app反编译成java ⇢ \dashrightarrow ⇢ 懂java ⇢ \dashrightarrow ⇢ 看懂逻辑 ⇢ \dashrightarrow ⇢ 使用python模拟这个过程
- hook技术 ⇢ \dashrightarrow ⇢ frida
- c语言写加密—》用java调用c语言的加密方式—》xx.so–>动态链接库文件
- 反编译 so文件—》IDA—》反编译成汇编和c
- 动态调试
- python模拟这个过程即可
- 反扒
- 请求头反扒:user-agent,referfer:上一个访问的地址是什么
- 反扒:无限调试
- 封ip ⇢ \dashrightarrow ⇢ ip代理池
-封账号 ⇢ \dashrightarrow ⇢ cookie池
-js加密 ⇢ \dashrightarrow ⇢ js逆向
动态链接库
百度,谷歌 搜索引擎本质其实就是个大爬虫 ⇢ \dashrightarrow ⇢ 不停的在互联网上爬取页面 ⇢ \dashrightarrow ⇢ 存到自己的库中
使用搜索的时候 ⇢ \dashrightarrow ⇢ 去百度的数据库中查询相关的关键字 ⇢ \dashrightarrow ⇢ 显示在页面上 ⇢ \dashrightarrow ⇢ 当我们点击某一个 ⇢ \dashrightarrow ⇢ 真正的跳转到 真正的搜索到的页面
百度做爬取时 ⇢ \dashrightarrow ⇢ 对动态页面的爬取权重要低
seo优化 ⇢ \dashrightarrow ⇢ 保证我们公司的网站通过关键字搜索,显示在第一个
- 伪静态 ⇢ \dashrightarrow ⇢
sem:付费买关键词
requests模块快速使用
介绍:
使用requests可以模拟浏览器的请求,比起之前用到的urllib(内置模块),requests模块的api更加便捷(本质就是封装了urllib3)
注意:
requests库发送请求将网页内容下载下来以后,并不会执行js代码,这需要我们自己分析目标站点然后发起新的request请求
- 混合项目 ⇢ \dashrightarrow ⇢ 拿回来的页面—带数据
- 分离项目 ⇢ \dashrightarrow ⇢ 拿回来的页面 ⇢ \dashrightarrow ⇢ 数据是空的 ⇢ \dashrightarrow ⇢ 再分析接口 ⇢ \dashrightarrow ⇢ 再发请求才能拿到真正的数据
看到一个页面有数据 ⇢ \dashrightarrow ⇢ 用requests发送请求 ⇢ \dashrightarrow ⇢ 拿回来的,可能跟看到的不一样
快速使用
- 安装模块:
pip install requests - 使用:
import requests# res中会有:http响应 响应头的,响应体的 res = requests.get('https://www.cnblogs.com/')# 响应体的文本字符串(可能会乱码) print(res.text)```
get请求携带请求参数
- 方式一:直接拼在后面
res=requests.get('https://www.cnblogs.com/?ordering=-id&search=课程') - 方式二:使用params参数
res=requests.get('https://www.cnblogs.com/',params={'ordering':'-id','search':'课程'}) print(res.text)
url 编码和解码
获得的网页内容可能会出现:%E7%BE%8E%E5%A5%B3
不是乱码 ⇢ \dashrightarrow ⇢ url编码了
url解码
res=parse.unquote('%E7%BE%8E%E5%A5%B3')
print(res)
url编码
res=parse.quote('刷币') # %E5%88%B7%E5%B8%81
print(res)
携带请求头
请求头中可能有的:User-Agent,referer,cookie,Host
- User-Agent:是消息头,可以在该消息头内了解到该网站所支持的浏览器同时可以知道访问该网站所用的浏览器以及浏览器版本,还能了解登录用的操作系统以及系统是多少位的。
- referer:代表从哪里来到当前页面进行访问的,百度推广就是通过referer进行的统计来访人数。不带referer可以直接下载带referer说明有防盗链。
- host:代表主机已百度为例,网址中www.baidu.com的host就是www.baidu.com
http1.1后面的1.1代表版本的协议号 ,分为1.0和1.1两个版本,发部分使用1.1版本,且 1.1版本必须要host请求头
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'
}
res = requests.get('https://www.sogou.com/web?query=%E7%BE%8E%E5%A5%B3', headers=header)
# res=requests.request('get','url',headers=header)
print(res.text)
相关文章:
爬虫之爬虫介绍、requests模块、携带请求参数、url 编码和解码、携带请求头
爬虫介绍 爬虫是什么? 网页蜘蛛,网络机器人,spider在互联网中 通过 程序 自动的抓取数据 的过程根上:使用程序 模拟发送http请求 ⇢ \dashrightarrow ⇢ 得到http响应 ⇢ \dashrightarrow ⇢ 把响应的数据解析出来 ⇢ \dashr…...
pytorch笔记:split
torch.split 是 PyTorch 中的一个函数,用于将张量按指定的大小或张量数量进行分割 1 基本使用方法 torch.split(tensor, split_size_or_sections, dim0)tensor要分割的输入张量split_size_or_sections以是整数或整数列表。 如果是整数,那么它表示每个分…...
K8S运维 解决openjdk:8-jdk-alpine镜像时区和字体问题
目录 一、问题 二、解决 三、完整代码 一、问题 由于项目的Dockerfile中使用openjdk:8-jdk-alpine作为基础镜像来部署服务,此镜像存在一定问题,例如时差8小时问题,或是由于字体问题导致导出excel文件,图片处理内容为空等。 二…...
Kubectl详解(陈述式、声明式)
目录 1、陈述式资源管理方法 1.1 基本信息查看 1.2 项目的生命周期:创建-->发布-->更新-->回滚-->删除 1.3 金丝雀发布(Canary Release) 2、声明式管理方法 1、陈述式资源管理方法 1.kubernetes 集群管理集群资源的唯一入口是…...
使用HttpClient库的爬虫程序
使用HttpClient库的爬虫程序,该爬虫使用C#来抓取内容。 using System; using System.Net.Http; using System.Threading.Tasks; namespace CrawlerProgram {class Program{static void Main(string[] args){// 创建HttpClient对象using (HttpClient client new…...
VSIX:C#项目 重命名所有标识符(Visual Studio扩展开发)
出于某种目的(合法的,真的合法的,合同上明确指出可以这样做),我准备了一个重命名所有标识符的VS扩展,用来把一个C#库改头换面,在简单的测试项目上工作很满意,所有标识符都被准确替换…...
【CSDN 每日一练 ★★☆】【动态规划】最小路径和
【CSDN 每日一练 ★★☆】【动态规划】最小路径和 动态规划 题目 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例 示例 1&#x…...
前端学习之webpack的使用
概述 webpack是一个流行的前端项目构建工具(打包工具),可以解决当前web开发中所面临的问题。 webpack提供了友好的模块化支持,以及代码压缩混淆、处理js兼容问题、性能优化等强大的功能,从而让程序员把工作重心放到具…...
【java学习—十一】泛型(1)
文章目录 1. 为什么要有泛型Generic2. 泛型怎么用2.1. 泛型类2.2. 泛型接口2.3. 泛型方法 3. 泛型通配符3.1. 通配符3.2. 有限制的通配符 1. 为什么要有泛型Generic 泛型,JDK1.5新加入的,解决数据类型的安全性问题,其主要原理是在类声明时通过…...
CN考研真题知识点二轮归纳(4)
持续更新,上期目录: CN考研真题知识点二轮归纳(4)https://blog.csdn.net/jsl123x/article/details/134135134?spm1001.2014.3001.5501 1.既可以扩展网段又是二层的设备 网段一般指一个计算机网络中使用同一物理层设备ÿ…...
ROS学习笔记(4):ROS架构和通讯机制
前提 前4篇文章以及帮助大家快速入门ROS了,而从第5篇开始我们会更加注重知识积累。同时我强烈建议配合B站大学的视频一起服用。 1.ROS架构三层次: 1.基于Linux系统的OS层; 2.实现ROS核心通信机制以及众多机器人开发库的中间层;…...
深度新闻稿件怎么写?新闻稿怎么写得有深度?
深度新闻稿件,顾名思义,是对新闻事件进行深入挖掘和分析的稿件。它不仅仅是对事件的简单报道,更注重对事件背后的社会现象、原因、影响等方面进行深度剖析,从而使读者能够全面、深入地了解事件。这种稿件要求作者具备较高的新闻敏…...
百度智能云千帆大模型平台黑客马拉松报名开启!
比赛简介 创造是生成式 AI 的核心。无论是智能导购带来的线上购物体验升级,还是主图生成带来的素材生产效率提升,又或是游戏场景的快速设置、智能 NPC 的全新交互、数字广告的精准推荐和个性化定制,亦或者是为学生提供更符合真实的口语练习环…...
数据库 | 看这一篇就够了!最全MySQL数据库知识框架!
大家好! 作为一名程序员,每天和各种各样的“数据库”打交道,已经成为我们的日常。当然,立志成为一名超级架构师的我,肯定要精通这项技能。咳咳!不过饭还是要一口一口吃的,“数据库”这个内容实在…...
Android 控件背景实现发光效果
主要实现的那种光晕效果:中间亮,四周逐渐变淡的。 这边有三种发光效果,先上效果图。 第一种、圆形发光体 实现代码:新建shape_light.xml,导入以下代码。使用时,直接给view设置为background。 <?xml …...
安全狗亮相厦门市工信领域数据安全宣贯培训会
10月31日,厦门市工业和信息化局(市大数据管理局)顺利举办厦门市工信领域数据安全宣贯培训。 作为国内云原生安全领导厂商,安全狗以厦门市工业领域数据安全管理支撑单位身份受邀出席此次会议。 据悉,此次活动旨在贯彻…...
最长回文子串
问题 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s "babad" 输出:"bab" 解释:"aba" 同…...
从瀑布模式到水母模式:ChatGPT引领软件研发的革新之路
ChatGPT引领软件研发的革新之路 概述操作建议本书优势 内容简介作者简介专家推荐读者对象目录直播预告写在末尾: 主页传送门:📀 传送 概述 计算机技术的发展和互联网的普及,使信息处理和传输变得更加高效,极大地改变了…...
一种使用wireshark快速分析抓包文件amr音频流的思路方法
解决方案: 1. 使用wireshark过滤amr,并导出原始数据文件; 2.使用ue的二进制编辑模式,编辑该文件,添加amr头,6个字节数据“#!AMR”,字节数据为 23 21 41 4D 52 0A 3.修正格式:通过抓包发现&#…...
银河麒麟x86版、银河麒麟arm版操作系统编译zlmediakit
脚本 # 安装依赖 gcc-c.x86_64 这个不加的话会有问题 sudo yum -y install gcc gcc-c libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg git openssl-devel gcc-c.x86_64mkdir -p /home/zenglg cd /home/zenglg git clone --depth 1 https://gitee.com/xia-chu…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
Mac flutter环境搭建
一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...
