爬虫——爬虫理论+request模块

一、爬虫理论

爬虫——请求网站并提取数据的自动化程序

网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动的抓取互联网信息的程序。

原则上,只要是浏览器(客户端)能做的事情,爬虫都能够做,也就是说万物皆可爬,可视即可爬

爬虫能抓取拿些数据?

- 网页文本

- 图片

- 视频,音频

- 其他(只要能请求到的 就意味着都能获取到)

二、request模块

作用:发送网络请求,获得响应数据

官方文档:https://requests.readthedocs.io/zh_CN/latest/index.html

Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库

它比urllib更加方便,可以节约大量的工作,完全满足HTTP测试需求的库

⼀句话——Requests是一个Python代码编写的HTTP请求库,方便在代码中模拟浏览器发送http请求a

安装命令
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

1.Requests请求

# https://www.baidu.com/
import requests
response = requests.get('https://www.baidu.com/')
print(response) # 响应体对象(响应源码+响应状态码+响应URL)
print(response.text) # 查看响应体内容


print(type(response.text)) # 查看响应内容的数据类型


print(response.status_code) # 查看响应状态码
print(response.url) # 查看响应url

各种请求方式

import requests
requests.get('http://httpbin.org/get')   # GET请求
requests.post('http://httpbin.org/post')  # POST请求
requests.put('http://httpbin.org/put')
requests.delete('http://httpbin.org/delete')
requests.head('http://httpbin.org/get')
requests.options('http://httpbin.org/get')

1.基于get请求
# 第一种写法
#https://www.baidu.com/s?wd=%E9%97%B9%E9%97%B9&base_query=%E9%97%B9%E9%97%B9&pn=10&oq=%E9%97%B9%E9%97%B9&ie=utf-8&usm=1&rsv_pq=a4f4e52200027b13&rsv_t=82600eHOUMYEzX16IwoPl%2BnK%2FnzM6jy5R9dFD9dBFEwqYVTYCFyzaCudbQA
url= 'http://httpbin.org/get?age=12&name=naonao'#&和
r = requests.get(url)
print(r.status_code)
print(r.text)

第二种写法

data = {
    'name':'lisi',
    'age':10
}
url = 'http://httpbin.org/get'
r = requests.get(url,params = data) #params:携带get请求的参数
print(r.text)
2.基于Post请求
url ='http://httpbin.org/post' 
d = {'lisi':10}
r = requests.post(url,data=d) #data:携带post请求的参数
print(r.text)

3.获取json数据
import json

url = 'http://httpbin.org/get'
r = requests.get(url)
# print(r.status_code)  # 查看响应状态码
a = r.text
# print(a)   
# print(type(a))  # 查看数据类型

#利用内置模块 json
dict_data = json.loads(a)#str 转为dict
print(dict_data)
print(type(dict_data))
res = dict_data['url']
print(res)
# res = dict_data['Host']#错误演示 报错
res = dict_data['headers']['Host']
print(res)

json_data = r.json()
print(json_data)
print(type(json_data))
4. .content 获取二进制数据
url = 'https://www.baidu.com/img/baidu_jgylogo3.gif'
r = requests.get(url)   # 01010101
print(r.content)  # content:获取二进制数据
print(type(r.content))
with open('bdu.png','wb')as f:
    f.write(r.content)
"""
bytes类型是指一堆字节的集合,在python中以b开头的字符串都是bytes类型

Bytes类型的作用:
    1, 在python中, 数据转成2进制后不是直接以0101010的形式表示的,而是用一种叫bytes(字节)的类型来表示
    2,计算机只能存储2进制, 我们的字符、图片、视频、音乐等想存到硬盘上,也必须以正确的方式编码成2进制后再存。
      记住一句话:在python中,字符串必须编码成bytes后才能存到硬盘上
"""
5.添加headers 
# 目标站点 -- 知乎 :https://www.zhihu.com/explore
url ='https://www.zhihu.com/explore'
#组建身份信息
h = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
r = requests.get(url,headers = h) #headers = (关键字);携带伪装参数
print(r.status_code)
print(r.text)

2.Response响应

1.response属性
# 目标网站 --  :http://www.jianshu.com    
import requests
url = 'http://www.jianshu.com'
h = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}
r = requests.get(url,headers = h,allow_redirects=False)
print(r.status_code) # 查看响应状态码

# 查看响应头信息
print(r.headers)

# 查看url
print(r.url)

# 查看网页是否跳转
print(r.history)

# # 禁止网页跳转    allow_redirects=False #默认是为True
#为空就是没有跳转
2.状态码判断

200 请求成功   
301、302 请求发生跳转   
404   页面没找到  
500 502  503服务器内部错误

3.高级操作

会话维持

http/https 协议 是一种无状态的协议,对事物处理无记忆功能,所以每次请求都是一个独立状态

会话维持作用:跨请求时保持住某些参数

为了解决无状态协议 就有了cookie和session的出现

(1).通过cookie维持会话

# 通过cookie维持的只是一种状态(只能知道你是登录还是未登录的状态)    用户信息(账号+密码)
'''
应用场景:
碰到一定需要登录才可以访问的网站,那爬虫也需要携带上登录后的信息(cookie)

好处: 能请求需要登录才可以访问的页面
坏处:会大大提高你被反爬的几率  (换账号)
'''
import requests
# 构建身份伪装的时候 字典内是可以放多条信息的
head = {
    'cookie': 'UM_distinctid=1837e7ffbf6dda-0360993970b77c-78565470-1fa400-1837e7ffbf7fa1; CNZZDATA1279807957=36991445-1664272379-null%7C1664272379; _uab_collina=166427466049560581446295; ssxmod_itna=eqUxBDuDnGeYw4Dq0dc7tD9mat+8qY5mQwoAQQD/KDfO4iNDnD8x7YDvIAaQAC+BAaeqeW=exIiDOrQ4Liq4EbmfvWUDB3DEx0=etI74iiBDCeDIDWeDiDG4GmS4GtDpxG=Dj0FUZMUxi3Dbh=Df4DmDGY9QqDgDYQDGTI6D7QDIw6QiY49bCLKLLRgiY2xKG=DjMbD/fPFMQRFs=+ZbjnTPWPuDB=zxBjMfwXUfeDHzLNlelePWx+o/2mF7xhxQYeoYrh3tPQ4BY4jiAp=RGDE04wcwDDAKY+d0bD==; ssxmod_itna2=eqUxBDuDnGeYw4Dq0dc7tD9mat+8qY5mQwoAQG9b=QDBk7De7P5vA8vx5G8CqvxAP5uiBRGi+tGhYO=HOetAYQP4kUmGujkh3ZoXUhqt1g7pUjb/E8nwv8QSi91kU9A9G71OXCSLWO58e=yb4K7HT6INeUv1MEAse+FmNhu8d=oaa8AiF6npbSmrCS4hs8SHOt3sDUWEN/nhX/p45oWW1F7fMKLU/aOCcg8Lyajs6oLfPTmrZryUvx=8gcm0SZerB7WRdxWihgCHghf8Mc1LBjmCAt9zjVegGgOl4P9bA5wiD6ebGTc7jRDCrzRcNjyTlvxcHiBH29wMzbqyirR0WBhqQ0bFuiWvd4+8jGevm5gBtm7m3Te/Y4lyD4xbQ49Ywc/A8nyKMwxvqO3ohBH3D07LeDLxD2+GDD==; __bid_n=185a0f06f0b9f33b234207; read_mode=day; default_font=font2; locale=zh-CN; Hm_lvt_0c0e9d9b1e7d617b3e6842e85b9fb068=1677674664; BAIDU_SSP_lcr=http://localhost:8888/; FPTOKEN=9aR7Q74Pjtiby0hWs+8OC+QuVOuULdxF5RiFXsZCxtZguI4t4pXZPWszXvIKiK5qyyCISfrCGkkXxCA/TmGCsKuxXIGsUt0roo1Hk3FWuN0e4on1QJ9i7u/gT4EFkPuKLJrifNufedeW1Iws1qij1n9hh3ZLO4OdJ7VWD0yWRzJ9qRkG+yCCD6pP1rDG25+NbR5ccJZZ+sQ6hi1BUUyXc8437EaVk2A/qQxIfUCmWaRr9OHUoRQgqFweCl88gTeUVR447ln1BlWFqssikSTtZNP+JSaCXMgU9Va9DgCHUmf++p+Yq5Vs0/hrUuuYeUhTGOyZchV0pgatqZusu3U60dl/OHN3UxkkUk83paSy0Ietzu0yaWA1CLfmZLRDnnL/5ZctdbYY+g3Sk9CYNtPH0w==|hYfAlXpGQjGm4kMaq/PWT6E+PblQyaQrBzFkXalOeM4=|10|0cd8f2c4502ad7265689616b0e83b86a; _ga=GA1.2.1296484011.1677675227; _gid=GA1.2.232229311.1677675227; remember_user_token=W1syNjQ2MDkwMF0sIiQyYSQxMSRJUi9IRks4T1BUWFo5bW14Q3BTbTIuIiwiMTY3NzY3NTM2Mi44ODgwNzU0Il0%3D--316f3042074c36712cf27541f93abdf363f05116; web_login_version=MTY3NzY3NTM2Mg%3D%3D--a8c5d5e8df0d0cd0ecb44d8732cfcd62b5c2646a; _m7e_session_core=04577b356d69a86184b1b26468ff8726; _gat=1; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2226460900%22%2C%22first_id%22%3A%221837e7ffb9ee32-078ff4508ee4b4-78565470-2073600-1837e7ffb9f483%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%A4%BE%E4%BA%A4%E7%BD%91%E7%AB%99%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fopen.weixin.qq.com%2F%22%7D%2C%22%24device_id%22%3A%221837e7ffb9ee32-078ff4508ee4b4-78565470-2073600-1837e7ffb9f483%22%7D; Hm_lpvt_0c0e9d9b1e7d617b3e6842e85b9fb068=1677675376',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36',
}
response = requests.get("https://www.jianshu.com/",headers = head)
print(response.text)

(2).通过session维持会话

#创建一个session对象
#通过session发请求 此时就从无状态变成了有状态
import requests
s = requests.session()
# s.get('https://www.baidu.com/')
res = s.get('https://www.baidu.com/s?wd=python&base_query=python&pn=90&oq=python&ie=utf-8&usm=4&rsv_pq=f41c8f1d000399cb&rsv_t=ed15VorzvvhgKbeJyyNkbIwWFsEJ3dAclQ5pyPrU0ZBWA2UfX%2FBrXv%2BFsnE')
print(res.text)
 代理设置
# 目标站点:https://www.baidu.com
import requests
url= 'https://www.baidu.com'
# 组建IP信息
p ={
    'http':'114.231.46.240:8888',
    'https':'114.231.46.240:8888',
}
r = requests.get(url,proxies = p )  # proxies:携带IP信息
print(r.status_code)
超时设置
# 目标站点 : http://baidu.com
import requests
url= 'https://www.baidu.com'
r = requests.get(url,timeout = 2) #timeout关键字用来设置响应时间
print(r.status_code)
异常处理
url= 'https://www.baidu.com'
try:#你可能会出现异常的代码
    r = requests.get(url,timeout = 0.0000000001) 
    print(r.status_code) 
except:#解决
    print('timeout!')

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL第12课——联结表

三点:什么是联结?为什么使用联结?如何编写使用联结的select语句 12.1 联结 SQL最强大的功能之一就是能在数据查询的执行中联结(join)表。联结是利用SQL的select能执行的最重要的操作。 在使用联结前,需要了解关系表…

【数据结构 | PTA】栈

文章目录 7-1 汉诺塔的非递归实现7-2 出栈序列的合法性**7-3 简单计算器**7-4 盲盒包装流水线 7-1 汉诺塔的非递归实现 借助堆栈以非递归(循环)方式求解汉诺塔的问题(n, a, b, c),即将N个盘子从起始柱(标记…

Golang | Leetcode Golang题解之第447题回旋镖的数量

题目: 题解: func numberOfBoomerangs(points [][]int) (ans int) {for _, p : range points {cnt : map[int]int{}for _, q : range points {dis : (p[0]-q[0])*(p[0]-q[0]) (p[1]-q[1])*(p[1]-q[1])cnt[dis]}for _, m : range cnt {ans m * (m - 1)…

多功能快捷回复软件

各位亲爱的客服宝宝们,每天面对大量的客户咨询,您是否还在手动一个一个地打字回复呢?别担心,我们为您带来了一款多功能快捷回复软件——客服宝。有了它,您的工作将变得无比轻松! 客服宝是一款集成了内容存储…

window下‘jps‘ 不是内部或外部命令,也不是可运行的程序或批处理文件,特别是使用idea开发工具的环境

1、在系统环境变量里面查看是否有JAVA_HOME环境变量,如果是用idea来管理环境变量的,需要如图设置指向jbr,如果是单独安装的jdk环境指向自己的安装目录即可 2、设置系统环境Path,需要把jre和bin添加进去

手写mybatis之把反射用到出神入化

前言 但在实操上,很多码农根本没法阅读框架源码。首先一个非常大的问题是,面对如此庞大的框架源码,不知道从哪下手。与平常的业务需求开发相比,框架源码中运用了大量的设计原则和设计模式对系统功能进行解耦和实现,也使…

深度学习----------------------序列到序列学习(seq2seq)

目录 机器翻译Seq2seq编码器-解码器细节训练衡量生成序列的好坏的BLEU总结序列到序列学习实现循环神经网络编码器解码器通过零值化屏蔽不相关的项该部分总代码 通过扩展softmax交叉熵损失函数来遮蔽不相关的预测训练预测BLEU的代码实现该部分总代码 机器翻译 给定一个源语言的…

IDEA几大常用AI插件

文章目录 前言列表GPT中文版TalkXBito AIIDEA自带的AI 前言 最近AI、GPT特别火,IDEA里面又有一堆插件支持GPT,所以做个专题比较一下各个GPT插件 列表 先看idea的plugins里支持哪些,搜索“GPT”之后得到的,我用下来感觉第一第二和…

使用微服务Spring Cloud集成Kafka实现异步通信(消费者)

1、本文架构 本文目标是使用微服务Spring Cloud集成Kafka实现异步通信。其中Kafka Server部署在Ubuntu虚拟机上,微服务部署在Windows 11系统上,Kafka Producer微服务和Kafka Consumer微服务分别注册到Eureka注册中心。Kafka Producer和Kafka Consumer之…

无法编辑PDF文件?试试这3个解决方法!

PDF文件格式广泛应用于工作中,但有时候我们可能遇到无法编辑PDF文件的情况。这可能导致工作效率降低,特别是在需要修改文件内容时显得尤为棘手。遇到PDF不能编辑时,可以看看是否以下3个原因导致的。 原因一:PDF文件设置了编辑权限…

dockertop提示Failed to fetch extensions

解决办法:重装dockertop 第一步:卸载当前的dockertop 如果卸载过程中存在AlibabaProtect的相关软件关不掉,那么参考这篇文章:卸载AlibabaProtect 第二步:删除C:\Program Files路径下的Docker文件夹 第三步&#xff1…

YOLOv5复现(论文复现)

YOLOv5复现(论文复现) 本文所涉及所有资源均在传知代码平台可获取 文章目录 YOLOv5复现(论文复现)概述模型结构正负样本匹配策略损失计算数据增强使用方式训练测试验证Demo 概述 YOLOv5是由Ultralytics公司于2020年6月开源的目标检…

【架构】prometheus+grafana系统监控

文章目录 一、Prometheus简介二、Grafana简介三、PrometheusGrafana系统监控的实现四、优势与应用场景 参考 PrometheusGrafana系统监控是一个强大的组合,用于实时监控和分析系统的性能与状态。以下是对这一组合在系统监控中的详细解析: 一、Prometheus…

【牛顿迭代法求极小值】

牛顿迭代法求极小值 仅供参考 作业内容与要求 作业内容 作业要求 递交报告 代码 编程实现 计算偏导数 故上述非线性方程组的根可能为 f ( x , y ) f(x, y) f(x,y)的极值点,至于是极小值点还是极大值点或鞍点,就需要使用微积分中的黑塞矩阵来判断了。…

避雷!Google Adsense联盟营销七大投放误区

你是否在使用Google AdSense进行广告投放?你是否想进一步优化你的投放策略?那么这篇文章你不可错过啦! Google AdSense为跨境商家提供了一个平台,我们可以通过展示相关广告来赚取收入。然而,即使是最有经验的商家也可…

C语言指针plus版练习

上期我们讲了进阶的指针,本期内容我们来强化一下上期学的内容 一、字符串左旋 实现一个函数,可以左旋字符串中的k个字符。 1.1 分析题目 假设字符串为abcde,左旋一个以后就变成bcdea,就是把第一个字符移到一个新的变量里面&#…

【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧

文章目录 C模板进阶编程前言第一章: 非类型模板参数1.1 什么是非类型模板参数?1.1.1 非类型模板参数的定义 1.2 非类型模板参数的注意事项1.3 非类型模板参数的使用场景示例:静态数组的实现 第二章: 模板的特化2.1 什么是模板特化?2.1.1 模板…

Leetcode 10. 正则表达式匹配

1.题目基本信息 1.1.题目描述 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s 的,而不是部分…

阿里云云虚拟主机SSL证书安装指南

在安装SSL证书的过程中,您需要确保已经正确获取了SSL证书文件,并且能够访问阿里云云虚拟主机的管理页面。以下是详细的步骤说明: 第一步:准备SSL证书 申请SSL证书:访问华测ctimall网站(https://www.ctimal…

初始爬虫12(反爬与反反爬)

学到这里,已经可以开始实战项目了,多去爬虫,了解熟悉反爬,然后自己总结出一套方法怎么做。 1.服务器反爬的原因 服务器反爬的原因 总结: 1.爬虫占总PV较高,浪费资源 2.资源被批量抓走,丧失竞争力…