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

Python爬虫

目录

爬虫总览

准备工作

一、爬虫基础

1、爬虫前导

1.1、爬虫介绍

1.2、HTTP与HTTPS

1.3、URL

1.4、开发工具

1.5、爬虫流程

2、requests模块

2.1、简介

2.2、安装

2.3、发送请求

二、爬虫


爬虫总览

966b0a42436b4cdd9b125f215b781342.png

准备工作

一、爬虫基础

1、爬虫前导

1.1、爬虫介绍


  • 概念:⽹络爬⾍是伪装成 客户端 与服务器进⾏数据交互的程序

    ⼝语化定义:⼀类⾃动采集互联⽹资源的程序

  • 作⽤:

    1. 数据采集

    2. 搜索引擎

    3. 模拟操作爬⾍被⼴泛的应⽤于模拟⽤户操作,测试机器⼈,灌⽔机器⼈等

  • 爬⾍开发难点:

    1. 数据获取 服务端会设置图灵测试,阻⽌爬⾍恶意爬取,开发爬⾍过程中,很⼤⼀部分⼯作处理反爬策略。

    2. 采集速度 多任务爬⾍和分布式爬⾍

1.2、HTTP与HTTPS


⽹络架构

  1. c/s : client/server 客户端/服务端

  2. b/s : brower/server 浏览器 服务端

  3. m/s: mobile server 移动端 服务端 

a5333a9f237c46b1b5784902af4ccb95.png

HTTP协议

  1. 原因:保证计算之间信息的有效交流,需要协议

  2. 概念:HTTP(Hyper Text Transfer Protocol) 超⽂本传输协议

HTTPS协议

https(Hyper Text Transfer Protocol over SecureSocketLayer)超文本安全协议,是HTTP+SSL,是以安全为⽬标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。

1.3、URL


通过URL对网络资源进行定位

URL(Uniform Resource Locator),中文叫统一资源定位符。是用来标识某一处资源的地址。也就是我们常说的网址。

协议+域名(端口默认80)+路径+参数

域名(Domain Name),⼜称⽹域,是由⼀串⽤点分隔的名字组成的Internet上某⼀台计算机或计算机组的名称,⽤于在数据传输时对计算机的定位标识 。由于IP地址具有不⽅便记忆并且不能显示地址组织的名称和性质等缺点,⼈们设计出了域名。

端⼝(Port),可以认为是设备与外界通讯交流的出⼝。端⼝可分为虚拟端⼝和物理端⼝,其中虚拟端⼝指计算机内部或交换机路由器内的端⼝,不可⻅;物理端⼝⼜称为接⼝,是可⻅端⼝。

路径(path),表示主机上的⼀个⽬录或者⽂件地址。

eb69b2b03a014bf1a9de88b0edc827d9.png

1.4、开发工具


通过快捷键fn+f12/f12启动/右击——检查启动

ca054338eb9d4ccba3ae273a51935c26.png

  • elements:⽹⻚源代码(最终⻚⾯渲染的结果)提取数据与分析数据

  • Console:打印内容

  • Sources:整个⽹站资料的来源

Network:⽹络⼯作(数据抓包),客户端与服务器之间交互的数据

1.5、爬虫流程


我们需要有一个第三方库来帮我们实现发送请求获取响应:

导⼊模块requests

pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple 

1.目标url

  • 静态加载

  • 动态加载

2.模拟浏览器发送请求,接受响应

请求方式:

get: get⼀般⽤来获取服务器的信息的,查询参数⼀般会在URL上显示出来

post:post⼀般是⽤来更新信息。参数不会在URL显示出来

import requests
url = 'https://www.baidu.com/'
response = requests.get()
print(response)  # 200

状态码

  • 200:请求成功

  • 403:可能被识别是反爬的程序了

  • 404:服务器找不到请求的⽹⻚

内容获取

  • response.text :返回字符串类型的数据

  • response.content:返回字节流数据(⼆进制)

  • response.content.decode('utf-8'):⼿动解码,获取字符串类型的数据

User-Agent:简称ua,是⼀种向访问⽹站提供你所使⽤的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识

Cookie:是某些⽹站为了辨别⽤户身份

Referer:防盗链,显示从那个url跳转过来的,确定请求来路。

2、requests模块

2.1、简介


afa24d67bb674521b4d8139c3457c262.png

        Requests是⼀个优雅⽽简单的Python HTTP库,专为⼈类⽽构建。

        Requests是有史以来下载次数最多的Python软件包之⼀,每天下载量超过400,000次。

        

        之前的urllib做为Python的标准库,因为历史原因,使⽤的⽅式可以说是⾮常的麻烦⽽复杂的,⽽且官⽅⽂档也⼗分的简陋,常常需要去查看源码。与之相反的是,Requests的使⽤⽅式⾮常的简单、直观、⼈性化,让程序员的精⼒完全从库的使⽤中解放出来。

2.2、安装


在命令行窗口输⼊命令:

pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

2.3、发送请求


使⽤ Requests 发送⽹络请求⾮常简单。导包之后添加⽅法进⾏。

Requests的请求不再像urllib⼀样需要去构造各种Request、opener和handler,使⽤Requests构造的⽅法,并在其中传⼊需要的参数即可。

每⼀个请求⽅法都有⼀个对应的API,⽐如GET请求就可以使⽤get()⽅法,⽽POST请求就可以使⽤post()⽅法,并且将需要提交的数据传递给data参数即可,⽽其他的请求类型,都有各⾃对应的⽅法

发起请求的⽅法变得简单,我们只需要着重关注⼀下发起请求的参数 :

request源码

def request(url,params=None, headers=None, cookies=None,timeout=None,allow_redirects=True,proxies=None,verify=None, data=None,json=None):pass

httpbin.org

这个网站是用来做测试的,用来验证请求

{"args": {}, "headers": {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6", "Host": "httpbin.org", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.39", "X-Amzn-Trace-Id": "Root=1-643813dc-7be19f3e27c8a4696424b8cc"}, "origin": "58.212.74.124", "url": "http://httpbin.org/get"
}

(1)url

import requestsurl='https://www.baidu.com/'
response = requests.get(url=url)
print(response)

运行结果:

074ed5b43e56457895d8b44f04293f40.png

httpbin.org

1dd0c52efb2e4ceda089b700a665c7b3.png

(2)params

添加请求参数

传递URL参数也不⽤再像urllib中那样需要去拼接URL,⽽是简单的,构造⼀个字典,并在请求时将其传递给params参数,此时,查看请求的URL,则可以看到URL已经构造正确.

eg:

1.在url中直接添加参数

import requestsurl = 'http://httpbin.org/get?key1=value1&key2=value2'
response = requests.get(url=url)
print(response.text)

2.构造字典

import requestsurl = 'http://httpbin.org/get'
params = {'key1':'value1','key2':'value2'
}
response = requests.get(url=url,params=params)
print(response.text)

运行结果:

c07949189a064501b547770773cfc94f.png

(3)headers

添加请求头

如果想⾃定义请求的Headers,同样的将字典数据传递给headers参数。

 通过添加请求头来伪造自己的身份

341337ab76024e5dafb7f27f5db59796.png

eg:

import requests
​
url = 'https://httpbin.org/get'
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"
}
response = requests.get(url=url,headers=headers)
print(response.text)

运行结果:

80cb08911e0347a0babe36687978edce.png

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"# 携带的内容:操作系统、浏览器等

(4)cookies

添加cookies

状态保持

储存用户身份

Requests中⾃定义Cookies也不⽤再去构造CookieJar对象,直接将字典递给cookies参数。

服务器是不记录用户信息的,为了让服务器能够识别用户,用户每次访问的时候就给它一个cookies,这个cookies保存在浏览器(本地电脑)。

eg:

1.在请求头中构造

import requests
​
url = 'https://httpbin.org/get'
headers={"User-Agent": "",'cookie': 'crawler','referer': 'crawler' # 防盗链
}
response = requests.get(url=url,headers=headers)
print(response.text)

2.单独构造

import requests
​
url = 'https://httpbin.org/get'
headers={"User-Agent": "crawler1"
}
cookies = {'name':'crawler1' }
response = requests.get(url=url,headers=headers,cookies=cookies)
print(response.text)

运行结果:

(5)timeout

设置超时时间

当访问超时,设置timeout参数即可。

import requests
​
url = 'http://www.baidu.com'
resp = requests.get(url, timeout=3)
print(resp.text)

由于是国外的网站,访问会超时,会一直等待响应,这时我们设置超时时间,超时时间已过之后就会超时报错

运行结果:

(6)proxies

设置代理

当我们需要使⽤代理时,同样构造代理字典,传递给proxies参数。

请求端ip地址

eg:

import requests
​
url = 'https://httpbin.org/get'
proxies = {'http':'183.209.124.38:8088' # 代理ip
}
response = requests.get(url=url,proxies=proxies)
print(response.text)

运行结果:

快代理 - 企业级HTTP代理IP云服务我这里使用的代理ip不可用,可以购买使用:快代理 - 企业级HTTP代理IP云服务

(7)verify

证书忽略验证

有时候我们使⽤了抓包⼯具,这个时候由于抓包⼯具提供的证书并不是由受信任的数字证书颁发机构颁发的,证书默认是开启的,所以证书的验证会失败,所以我们就需要关闭证书验证。在请求的时候把verify参数设置为False就可以关闭证书验证了。

eg:

import requests
​
url = 'https://httpbin.org/get'
response = requests.get(url=url,verify=False) # 出现警告
print(response.content.decode())

运行结果:

PS:关闭验证后,会有⼀个⽐较烦⼈的warning,当不影响运行的结果,关闭即可。

import warnings
​
warnings.filterwarnings("ignore")

(8)data

携带数据

POST请求发送Form表单数据

eg:

import requests
​
url = 'http://httpbin.org/post'
data = {"name":"spider"}
resp = requests.post(url, data=data)
print(resp.text)

运行结果:

 (9)

携带数据

eg:

url = 'https://httpbin.org/post'
data = {'name':'crawler'
}
response = requests.post(url=url,json=data)
print(response.text)

运行结果:

注意:

PS:json和data 不可以同时添加

二、爬虫

相关文章:

Python爬虫

目录 爬虫总览 准备工作 一、爬虫基础 1、爬虫前导 1.1、爬虫介绍 1.2、HTTP与HTTPS 1.3、URL 1.4、开发工具 1.5、爬虫流程 2、requests模块 2.1、简介 2.2、安装 2.3、发送请求 二、爬虫 爬虫总览 准备工作 一、爬虫基础 1、爬虫前导 1.1、爬虫介绍 概念&…...

python基础案例题:进制转换、字符串加密的实现、猜拳游戏、多种方法计算π

目录 前言1.进制转换2.字符串加密的实现3.猜拳游戏4.多种方法计算π尾语 💝 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 1.进制转换 功能: 获取十进制整数的二进制串,相当于内置函数bin。 算法分析: 对2辗转相除&…...

Spring Boot入门与进阶

本文将为您详细讲解Spring Boot的入门与进阶知识,包括Spring Boot的简介、环境搭建、基本功能以及高级特性,并配以丰富的代码示例,帮助大家快速掌握Spring Boot。 一、Spring Boot简介 Spring Boot是基于Spring框架的一种轻量级、快速开发的…...

servlet(1)—javaEE

文章目录 1.认识servlet2.使用servlet2.1创建项目2.2引入依赖2.3创建目录2.4编写代码2.5打包2.6部署2.7运行2.8验证 3.开发步骤4.部署方式4.1打包4.2安装插件 5.访问出错的情况5.1 4045.2 4055.3其他 6.servlet的三大生命周期方法7.servlet api7.1HttpServlet7.2HttpServletReq…...

定制 Jenkins 镜像说明

Dockerfile模板示例 FROM jenkins/jenkins:2.332.4-jdk8 MAINTAINER jason USER root RUN sed -i ‘s/deb.debian.org/mirrors.aliyun.com/g’ /etc/apt/sources.list && apt update && apt install ca-certificates tzdata -y && rm -rf /var/cach…...

【离散数学】测试五 图论

1. n层正则m叉树一共有()片树叶。 A. nm B. mn C. mn 正确答案: B 2. 下图是一棵最优二叉树 A. 对 B. 错 正确答案: B 3. 要构造权为1,4,9,16,25,36,49,64,81,100一棵最优二叉树,则必须先构造权为5,9,16,25,36,49,64,81,100一棵最优二叉树. A. 对 B. 错 …...

根据cadence设计图学习硬件知识 day03 了解 一些芯片 和 数据手册下载的地方

1. MT53D512M32D2DS 芯片(动态随机存取存储器)的技术指标 1.1 16n Prefetch (预加载) (n --芯片位宽) DDR 体系 链接:DDR扫盲—-关于Prefetch(预取)与Burst(突发)的深入讨论_ddr prefetch_qq_25814297-npl的博客-CSDN博客 1.2 每个通…...

计算机组成原理——第五章中央处理器(中)

辞别再无相见月,终是一人度春秋 文章目录 前言5.4.1 硬布线控制器的设计5.4.2 微程序控制器的基本原理5.4.3 微指令的设计5.4.4 微程序控制单元的设计 前言 本文主要写的是控制器的设计,控制器的设计分为硬部件控制器(就是用纯硬件的方式来实现的一种控…...

ImageJ 用户手册——第三部分(ImageJ扩展)

ImageJ 用户手册-第三部分 ImageJ扩展14. 宏指令(Macros)宏程序设计 15. 脚本( Scripts)JavaScript编程 16. 插件( Plugins)开发ImageJ插件 17. 用其他语言编写脚本Fiji脚本编辑器 18. 从命令行运行ImageJ …...

RK3399平台开发系列讲解(PCI/PCI-E)PCIE相关配置说明

🚀返回专栏总目录 文章目录 一、DTS 配置二、menuconfig 配置三、cmdline 配置沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将介绍在使用 RK3399 平台 PCIE 时候的配置。 一、DTS 配置 ep-gpios = <&gpio3 13 GPIO_ACTIVE_HIGH>; 此项是设置 PCIe…...

NAS私有云存储 - 搭建Nextcloud私有云盘并公网远程访问

文章目录 摘要视频教程1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问 4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名 转载自内网穿透工具的文章&#xff1a;使用Nextcl…...

Revit问题:墙体被楼板剪切及材质库被锁定问题

一、Revit 墙体被楼板剪切怎么办? 建模的时候画的墙总是到楼板就停了&#xff0c;这是为什么&#xff1f;明明顶部约束到标高2了&#xff0c;这种情况如何解决&#xff1f; 首先来分析问题产生的原因是&#xff0c;我们在绘制楼板的时候选择了用楼板剪切重复部分的墙体。 解决…...

CPU信息查询与CPU测试方法总结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请征得博主同意并附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/mainmaster/article/details/130267689 未经允许不能拷贝本文章内容发布到其他相关载体上。 CPU信息查询 我们知道在嵌入式系统…...

ChatGPT时代,我们可能站到了自然语言编程的大门口

ChatGPT大火&#xff0c;我现在有种感觉&#xff1a;我们可能站到了自然语言编程的门口&#xff0c;一脚下去&#xff0c;也许能把门踹开。 当然&#xff0c;也可能会踢到一块铁板。 回顾我们的编程之路&#xff0c;基本上就是一个编程门槛不断降低的历史。 最早的一批前辈们…...

深入理解AMQP协议

一.AMQP 是什么 AMQP&#xff08;Advanced Message Queuing Protocol&#xff0c; 高级消息队列协议&#xff09;是一个提供统一消息服务的 应用层标准高级 消息队列协议&#xff0c;是 应用层协议的一个 开放标准,为面向消息的中间件设计&#xff0c;是一个进程间传递 异步消息…...

大型体检管理系统源码:适用于大中型医院或独立体检中心

一套专业的体检管理系统源码&#xff0c;是医院、体检中心等单位开展体检业务的得力助手。它将以往人工操作的健康体检过程所得到信息转换成全信息化的电脑管理&#xff0c;使体检过程更为流畅、更有条理&#xff0c;更加便于管理&#xff0c;从而实现体检业务管理的自动化、信…...

ACM 1000 | 简单的a+b

文章目录 0x00 前言 0x01 题目描述 0x02 问题分析 0x03 代码设计 0x04 完整代码 0x05 运行效果 0x06 参考文献 0x07 总结 0x00 前言 C 语言网不仅提供 C 语言&#xff0c;还包括 C 、 java 、算法与数据结构等课程在内的各种入门教程、视频录像、编程经验、编译器教程及…...

系统分析师选择题笔记

目录 1、知识产权与标准化 1.1 保护范围与对象(★★★★) 1.2 保护期限(★) 1.3 知识产权人确定(★★★) 1.4 侵权判断(★★★) 1.5 标准的分类(★) 1.6 标准代号的识别(★) 2、系统配置与性能评价 2.1 系统性能概述 2.2 系统性能&#xff08;性能指标&#xff09;(★…...

MySQL隐式类型转换

当运算符与不同类型的操作数一起使用时&#xff0c;会发生类型转换以使操作数兼容。有些转换是隐式发生的。例如&#xff0c;MySQL会根据需要自动将字符串转换为数字&#xff0c;反之亦然。 转换规则 如果一个或两个参数都为NULL&#xff0c;则比较结果为NULL 。但是相等比较…...

IT知识百科:什么是SSID?

一、什么是SSID SSID&#xff08;Service Set Identifier&#xff09;是无线网络中的一个重要概念&#xff0c;它是一个用于标识无线局域网&#xff08;WLAN&#xff09;的名称。SSID可以看作是无线网络的名称&#xff0c;类似于有线网络中的网络名称或者路由器的名称。在无线…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇&#xff1a;Apollo Client 配置与缓存 上一篇&#xff1a;GraphQL 入门篇&#xff1a;基础查询语法 依旧和上一篇的笔记一样&#xff0c;主实操&#xff0c;没啥过多的细节讲解&#xff0c;代码具体在&#xff1a; https://github.com/GoldenaArcher/graphql…...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...