当前位置: 首页 > 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;类似于有线网络中的网络名称或者路由器的名称。在无线…...

OpenAI-ChatGPT最新官方接口《从0到1生产最佳实例》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(十一)(附源码)

Production Best Practices 生产最佳实例 前言Introduction 导言Setting up your organization 设置您的组织Managing billing limits 管理计费限额API keys API密钥Staging accounts 演示账户 Building your prototype 构建您的原型Additional tips 其它技巧 Techniques for i…...

2023 IT市场权威榜单|美创数据库防火墙斩获“新一代信息技术创新产品”

4月20日&#xff0c;由赛迪顾问主办的“2023 IT市场权威榜单”评选结果正式发布&#xff0c;美创数据库防火墙斩获新一代信息技术创新产品&#xff01; 美创数据库防火墙是一款抵御并消除由于应用程序业务逻辑漏洞或者缺陷所导致的数据库安全问题的专业级数据库安全产品&#x…...

30个超级有用的JavaScript单行代码

在这篇文章中&#xff0c;我列出了一个系列的 30 个 JavaScript 单行代码&#xff0c;它们在使用 vanilla js&#xff08;≥ ES6&#xff09;进行开发时非常有用。它们也是使用该语言在最新版本中为我们提供的所有功能来解决问题的优雅方式。 我将它们分为以下5大类&#xff1…...

【GitLab私有仓库】在Linux上用Gitlab搭建自己的私有库并配置cpolar内网穿透

前言 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的Web服务。 Gitlab是被广泛使用的基于git的开源代码管理平台, 基于Ruby on Rails构建, 主要针对软件开发过程中产生的代码和文档进行管理, Gitlab主要针对…...

诊断CAPL自动化(1)—— CANoe自带的诊断工程分析

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe,博客目录大全,点击跳转👉 📘前言 🍅 学习CANoe,官方的实例工程就是最好的学习模板,对于初学者,…...

【dp】最长递增子序列

文章目录 方法一&#xff1a;动态规划方法二&#xff1a;贪心 二分查找构造最长递增子序列 方法一&#xff1a;动态规划 dp[i]&#xff1a;末尾元素为arr[i]的最长子序列的长度 从0遍历到i - 1&#xff0c;若遍历到的元素小于当前值arr[i]&#xff0c;表示当前值arr[i]可以和…...

docker容器:Docker-Compose

目录 一、Docker-Compose 1、Docker-Compose使用场景 2、Docker-Compose简介 3、Docker-Compose安装部署 4、YML文件编写注意事项 5、Compose配置常用字段 6、 Docker Compose 常用命令 7、Docker Compose 文件结构 8、docker Compose撰写nginx 镜像 9、docker Compos…...

如何使用DNS实现融合CDN功能

将托管DNS解决方案与CDN配对可为您的网站提供额外的性能、可靠性和灵活性。 域名系统&#xff08;DNS&#xff09;是一种用于计算机、服务或连接到Internet或专用网络的任何资源的分层分布式命名系统&#xff0c;它将各种信息与分配给每个参与实体的域名相关联&#xff0c;它基…...

有关实现深拷贝的四种方法

深拷贝与浅拷贝: 在开始之前我们需要先了解一下什么是浅拷贝和深拷贝&#xff0c;其实深拷贝和浅拷贝都是针对的引用类型&#xff0c;JS中的变量类型分为值类型&#xff08;基本类型&#xff09;和引用类型&#xff1b;对值类型进行复制操作会对值进行一份拷贝&#xff0c;而对…...

Mysql 高可用部署实践

mysql主从是如何备份的? 在MySQL主从复制架构下&#xff0c;备份通常需要在主库和从库上分别进行。 主库备份&#xff1a; 在主库上进行备份时&#xff0c;可以使用mysqldump等命令生成SQL文件&#xff0c;并将其保存到本地或者远程服务器上。备份过程中需要注意以下几点&a…...