【Python爬虫与数据分析】爬虫网络请求

目录

一、网络请求流程

1.HTTP

2.URL

3.网络传输模型

4.长链接/短链接

二、爬虫基础

1.基础概念

2.发送请求

3.请求模式

4.cookie

5.retrying


一、网络请求流程

1.HTTP

  1. 用户输入网址,例如 www.baidu.com
  2. 浏览器先向DNS请求,找到网址域名对应的ip地址和端口号并传到前端
  3. 浏览器请求访问这个ip地址对应的服务器,然后将域名里带有的参数一起传入后端
  4. 后端将接收到的参数拼写成sql语句,通过sql语言向数据库查询数据
  5. 数据库将结果返回给后端
  6. 后端将得到的数据整理成统一的格式返回给前端
  7. 前端拿到数据之后,通过前端代码进行渲染加工,展示在页面上提供给用户 

2.URL

URL示例:

https://www.bilibili.com/video/BV1dK4y1A7aM/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=18bd1edf91a238e3df510f2409d7b427

URL的四部分:

  • 协议:https://
  • 域名:www.bilibili.com/
  • 资源路径:video/BV1dK4y1A7aM/?
  • 参数:spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=18bd1edf91a238e3df510f2409d7b427

通常情况资源路径与参数部分用 '?' 进行分隔,不同参数之间用 ‘&’ 进行分隔

在输入网址的时候协议和域名部分是必须要有的,协议不输入浏览器会默认使用https://

域名包括了ip地址和端口号port

3.网络传输模型

HTTP协议(HyperText Transfer Prorocol)超文本传输协议,是浏览器和web服务器传输数据格式的协议,基于TCP协议,是一个应用层协议

 在保证应用层、传输层、网络层、链路层一致后:

  1. 数据先从客户端从应用层一级一级向链路层传递
  2. 通过以太网络和IP,将数据进行传输
  3. 通过令牌环(加密算法),验证数据,保证数据真实可靠
  4. 再由链路层将数据传递到应用层,表示数据可进行下一步操作

4.长链接/短链接

HTTP/1.0中,服务器默认使用短链接。浏览器和服务器每进行一次HTTP操作,就建立一次链接,任务结束就中断链接。

HTTP/1.1起,浏览器默认使用长链接。客户端的浏览器访问某个HTML或其他类型的web页中包含有其他的web资源,如js文件、图像文件、CSS文件等,当浏览器每遇到一个这样的资源,就会建立一个HTTP会话。

Connection:keep-alive

keep-alive是客户端和服务端的一个约定,即长链接,表示服务端在返回response后不关闭TCP连接,接收完响应之后的客户端也不关闭TCP连接,发送下一个HTTP请求时会重用该连接

  • 短链接对于服务器来说实现比较简单,存在的链接都是有效的连接,不需要额外的控制手段
  • 短链接建立成功后,一次请求和响应完成以后连接就会断开,每次发送请求需要重新建立连接。往往可能很短的时间内创立大量连接,造成服务器响应速度过慢
  • 短链接不会占用服务端过多的资源,但是增加了用户的等待时间,减慢了访问速度
  • 长链接可以省去较多的TCP建立和关闭操作,提高效率
  • 长链接建立成功后,可以发送多次请求和响应,等双方不进行通信的时候,服务端做好断开链接的操作
  • 长链接增加了服务端的资源开销,可能造成服务端负载过高,最终导致服务不可用

二、爬虫基础

1.基础概念

什么是爬虫?爬虫即为模拟用户网络请求,向目标网站获取数据。理论上只要是浏览器上展示的数据,爬虫皆能获取。

爬虫流程:

  • 向url发送请求,获取响应
  • 对响应进行提取
  • 如果有需要提取url,则继续发送请求获取响应
  • 提取数据,将数据保存 

HTTP和HTTPS:

  • HTTP:超文本传输协议,默认端口号80
  • HTTPS:HTTP + SSL(安全套接字),带有安全套接字的超文本传输协议,默认端口号443

HTTP常见请求头:

  • Host:主机和端口号
  • Connection:连接类型
  • Upgrade-Insecure-Requests:升级HTTPS请求
  • User-Agent:浏览器名称
  • Accept:传输文件类型
  • Referer:页面跳转处
  • Accept-Encoding:文件编码/解码格式
  • Cookie:参数

User-Agent和Cookie是最重要的参数,这两个参数表明了请求的由来,是最好的伪装成人为请求的参数。

响应状态码(status code):

  • 200:成功
  • 302:临时转移至新的url
  • 307:临时转移至新的url
  • 404:找不到该页面
  • 403:资源不可用
  • 500:服务器内部错误
  • 503:服务器不可用,通常是被反爬

2.发送请求

requests请求:老版本的Python都是使用urllib发送请求,requests是对urllib的进一步封装

文本请求

import requestsurl = "https://www.baidu.com"# 向目标url发送get请求
response = requests.get(url)# 响应内容
print(response.text)             # str类型
print(response.content)          # bytes类型
print(response.status_code)      # 状态码
print(response.request.headers)  # 请求头
print(response.headers)          # 响应头
print(response.cookies)          # 响应的cookie

import requestsurl = "https://www.baidu.com"# 向目标url发送get请求
response = requests.get(url)# 响应内容
print(response.text)    # str类型,中文字符为乱码
print(response.content) # bytes类型
print(response.content.decode())            # 正常显示中文字符
print(response.content.decode('utf-8'))     # 正常显示中文字符
print(response.content.decode('gbk'))       # 报错

图片请求 

import requestsurl = "https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/d-1592982809.jpg"response = requests.get(url)# 打印图片的字节型内容
print(response.content)with open("image.jpg", "wb") as f:# 写入response.content bytes二进制类型f.write(response.content)

请求头与参数 

请求头与参数会默认设置,但是如果我们要自定义请求头headersparams,我们要以字典的结构创建请求头和参数变量,并传入get或post请求函数

3.请求模式

get 请求:直接向网页发起的请求,可以不带任何参数

post 请求:当我们确定了需要什么数据时,再发起请求时需要带上参数

代理

反向代理:浏览器不知道服务器的真实地址,如nginx

正向代理:浏览器知道服务器的真实地址,如VPN

代理的使用本质上都是隐藏自己的ip地址。登录信息的不足,特定ip的被禁止,同一ip短时间内多次访问,这些都会被服务器定义为恶意ip并禁止访问。所以我们使用代理来替换真实的ip及访问信息。

import requests
import random as rd
import timefor i in range(1, 100):# 生成随机代理proxie_str = f"https://{rd.randint(1, 100)}.{rd.randint(1, 100)}.{rd.randint(1, 100)}." \f"{rd.randint(1, 100)}:{rd.randint(3000, 9000)}"print(proxie_str)# 设置代理proxie = {"https": proxie_str}url = "http://www.baidu.com"response = requests.get(url, proxies=proxie)print(response.content.decode())time.sleep(0.5)

4.cookie

cookie是爬虫访问网站时的个人信息,也是请求头中的重要组成部分。

cookie中的信息包括但不限于设备信息、历史记录、访问密钥。

使用requests处理cookie的三种方法:

        1. 将cookie字符串以键值对格式放入headers请求头字典中

header = {'Cookie': 'OUTFOX_SEARCH_USER_ID_NCOO=2067300732.9291213;''OUTFOX_SEARCH_USER_ID="93319303@10.169.0.81"; _ga=GA1.2.831611348.1638177688;''P_INFO=joldemox@163.com|1647320299|0|youdao_jianwai|00&99|shh&1647226292&''mailmaster_ios#shh&null#10#0#0|&0|mailmaster_ios|joldemox@163.com; fanyi-ad-id=305838;''fanyi-ad-closed=1; ___rl__test__cookies=1653295115820'
}

        2. 把cookie字典传给请求方法的cookie参数接收

cookies = {"cookie的key":"cookie的value"}
requests.get(url,headers=header,cookies=cookie)

        3. 使用requests提供的session模板

header = {'Cookie': 'OUTFOX_SEARCH_USER_ID_NCOO=2067300732.9291213;''OUTFOX_SEARCH_USER_ID="93319303@10.169.0.81"; _ga=GA1.2.831611348.1638177688;''P_INFO=joldemox@163.com|1647320299|0|youdao_jianwai|00&99|shh&1647226292&''mailmaster_ios#shh&null#10#0#0|&0|mailmaster_ios|joldemox@163.com; fanyi-ad-id=305838;''fanyi-ad-closed=1; ___rl__test__cookies=1653295115820'
}session = requests.session()
response = session.get(url, headers, verify=False)
# 这个写法针对长链接和第三方跳转,保证cookie可以在请求中不被清空

5.retrying

重复发送请求模块

import requests
from retrying import retry@retry(stop_max_attempt_number=4)
def get_info(url):# 超时会报错并重试# 等待超时时间设为4秒response = requests.get(url, timeout=4)# 状态码不是200也会报错重试assert response.status_code == 200return responsedef parse_info(url):try:response = get_info(url)except:print(Exception)response = Nonereturn responseif __name__ == "__main__":res = parse_info("https://www.baidu.com")print(res.content.decode())

这里的retry是以装饰器的形式,监视get_info,如果重试次数达到4次且仍然无法正常获取数据,则会停止并报错。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/69973.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有哪些网站用爬虫爬取能得到很有价值的数据?

目录 第一部分:介绍爬虫项目 1、微信好友的爬虫 2、拉勾网的数据那么多的招聘信息有用吗? 3、豆瓣的图书、电影信息有用吗? 4、美团和大众点评的数据有用吗? 5、伯乐在线的文章数据有用吗? 6、腾讯NBA的用户评论数据有用吗…

微信小程序——云函数

云函数是一种在小程序端编写、定义,通过开发工具部署到云服务器中,在小程序端可以远程调用的函数。这种函数在云服务器中执行。所以云函数可以简单替代nodejs后端接口。 体验云函数 1、创建云函数 前提:在新建项目时,选择”云开…

借助云函数实现微信小程序订阅消息推送功能

项目需要弄个微信小程序,第一次发教程,有些地方可能不太清楚,我尽量把我遇到的问题描述清楚 先看一下官方给订阅消息的简介 接下来咱们就开始借助云函数实现微信小程序订阅消息推送功能: 1、获取模板ID 模板id的获取首先要登陆微…

微信小程序 云开发 聊天功能

项目背景 。功能要求为:一对一聊天,可以发送文字,图片,语音,文件,视频,含消息列表页。 暑假没事干来写篇博客复盘一下。框架和样式部分就是采用了colorUI 的组件,没啥好说的&#x…

借助云开发,利用订阅消息,云函数路由实现小程序好友一对一聊天,添加好友等仿微信功能

微信小程序借助云开发,利用订阅消息,云函数路由实现小程序好友一对一聊天,添加好友等仿微信功能 这篇文章已经进行了更新,请点此进行查看仿微信好友聊天**点此获取源码** 主要功能有后续可能补充功能详细介绍注意 这篇文章已经进行…

微信小程序云开发通过服务号给用户推送模板消息

主要参考下面两个文章 1、云函数接收公众号消息推送 | 微信开放社区 ​​​​​​2、微信小程序通过公众号(服务号)推送通知或提醒步骤及代码(一,获取推送前所需信息)_微信小程序推送服务通知_庆登登登的博客-CSDN博客 一些基本的概念就不讲了,这里主要…

微信小程序云开发———云函数

1.云函数环境配置 在目录中添加一个cloud文件夹与pages平级 并在project.config.json文件中配置云函数所在目录cloud/ 保存后cloud文件夹会出现一个云朵的形状,并且需要我们进行同步环境列表 因为作者有其他的云开发环境,所以正常来说同学们新建的cloud…

微信小程序消息推送

简介 微信小程序发送消息推送到用户微信上 基础流程 用户登录 :获取微信提供的openid 开发者去微信公众平台申请模板:获得模板id授权消息推送:在小程序中调用wx.requestSubscribeMessage方法成功后将数据保存到后台 消息推送表 中在需要发送…

再度警惕!AI“灭霸”要来了?Hinton、Bengio等300余大佬联名上书

来源:机器之心 人工智能存在「灭绝」级别的风险,未来的系统可能像核武器一样致命。本周二,著名的人工智能学者、科技公司创始人团结了起来,发出呼吁。 公开信地址:https://www.safe.ai/statement-on-ai-risk 前有马斯克…

【探索人工智能】我与讯飞星火认知大模型的对话

文章目录 讯飞星火认知大模型的地址概要讯飞星火认知大模型的发展历程讯飞星火认知大模型的主页利用讯飞星火大模型解决一些基本的数学问题讯飞星火认知大模型与OpenAI,ChatGPT没有关系!让讯飞星火认知大模型编写传奇代码hello world小结 讯飞星火认知大模型的地址 …

在Ubuntu22.04里安装脉冲星信号处理工具----Pulsar软件包

在Ubuntu22.04安装Pulsar软件包 1.ubuntu 22.04 安装gcc-7、g7(用来编译后续软件) 1.1 添加镜像: 打开源镜像文件 sudo vim /etc/apt/sources.list在最后一行添加如下内容: deb [archamd64] http://archive.ubuntu.com/ubunt…

6-2. 实战项目:足球运动员分析

足球运动员分析 1. 项目背景 当前,足球运动是最受欢迎的运动之一(也可以说没有之一)。 我们的任务,就是在众多的足球运动员中,发现统计一些关于足球运动员的共性,或某些潜在的规律。也是好玩。 2. 数据…

【案例】足球运动员分析

文章目录 足球运动员分析案例需求数据集程序实现1. 导入相关库2. 加载相关数据集3. 数据探索与清洗3.1. 缺失值处理3.2. 异常值处理处理3.3. 重复值处理 4. 身高与体重处理5. 运动员身高,体重,评分信息分布6. 左脚与右脚选手在数量上是否存在偏差7. 从球…

足球运动员分析

数据集 数据集 背景: 我们关注足球运动员的如下内容: 足球运动员是否受出生日期的影响?左撇子适合踢足球吗?足球运动员的号码是否与位置有关?足球运动员的年龄与能力具有怎样的关联? 哪些技能会对足球运…

解析波士顿动力Handle机器人背后的技术(附PPT+视频)

[转] http://www.leiphone.com/news/201703/URrR8CG2tmtghNDl.html 导语:Boston Dynamics 在机器人动力方面堪称翘楚,其由双足或多足机器人组成的机器人天团总是时不时能给我们带来惊喜。上周,Boston Dynamics 又发布了一段视频,并…

解析波士顿Handle机器人背后的技术

在斗鱼直播平台,浙大李超博士的公开课分享了关于handle的技术细节,解析波士顿Handle机器人背后的技术,观察敏锐,思路清晰。 内容介绍了波士顿动力公司的历代4足和2足机器人的开发历史。并结合李超的专业重点讲解了腿的细节。 李…

开源四足机器人 附设计图及代码

斯坦福学生机器人俱乐部(Stanford Student Robotics club)Extreme Mobility 团队最近迎来了一名新成员——一个名为 Stanford Doggo 的四足机器人。这个机器人能跳 1 米多高,还能表演后空翻。与其他四足机器人动辄上万美元的成本不同&#xf…

ROS2机器人笔记21-03-14

ROS会议和活动: 如果对机器人技术感兴趣,但是看不到任何适合兴趣的项目,那么可能还需要考虑将其应用于同级组织中,例如OpenCV和MoveIt! 核心是各种应用和ROS2的逐渐普及 GPU运算越来越主流,Nvidia Jetson…

波斯顿动力机器人“特效专辑”

关注星标公众号,不错过精彩内容 作者 | strongerHuang 公众号 | strongerHuang 波斯顿动力机器人的视频为啥那么火? 首先,他们机器人本身很牛逼,能完成各种高难度动作,拍出来的视频自然很多人关注。 其次,有…

清华2019最新AI发展报告出炉!400页干货,13大领域一文看懂

2019-12-08 20:36:36 当前,人工智能正处在爆发期。我国在人工智能领域的科学技术研究和产业发展起步稍晚,但在最近十余年的时间里抓住了机遇,进入了快速发展阶段。在这个过程中, 技术突破和创造性高端人才对人工智能的发展起着至…