爬虫的介绍与使用

news/发布时间2024/5/15 11:01:01

1 爬虫介绍

爬虫是什么?

-通过编程技术,把互联网中的数据获取经过数据清洗,存到库中
python:request,selenium---》app,小程序,网站---》xpaht,lxml---》mysql,redis,文件,excel,mongodb-通过编程语言---》模拟发送http请求---》获取数据---》解析--》入库-爬取过程 解析过程 会遇到反扒-抓app,小程序---》抓包工具---》抓取手机发送的所有请求-charles-Fiddler

爬虫协议

-君子协议
-https://xxx/robots.txt

百度就是一个爬虫

-百度/谷歌 搜索引擎---》启动了一个爬虫---》一刻不停的在互联网中爬取网站---》存到库中(es)
-用户在百度输入框中---》输入搜索内容---》去百度的库中搜索--》返回给前端---》前端点击---》去了真正的地址-seo 优化-不花钱---》搜索关键词的结果---》排的靠前-伪静态-sem 优化-花钱买关键词

2 requests模块介绍和快速使用

requests:模拟发送http请求模块---》封装了urlib3[python内置的发送http请求的模块]

requests库发送请求将网页内容下载下来以后,并不会执行js代码,这需要我们自己分析目标站点然后发起新的request请求# 第三方
pip3 install requests

3 requests发送get请求

# requests可以模拟发送http请求,有的时候,网站会禁止---》禁止的原因是:模拟的不像,有的东西没带# http请求:请求头中没带东西,没带cookie,客户端类型,referer...import requests# 这个网站没有反扒
res=requests.get('https://www.cnblogs.com/')
print(res.text) # 响应体内容

4 携带get参数

import requests​
# 1 url编码和解码  %E4%B8%8A%E6%B5%B7 ===》上海​
# res=requests.get('https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295&region=上海&query=肯德基&output=json')​​# 2 携带get参数,第二种方式
params = {    'ak': '6E823f587c95f0148c19993539b99295',    'region': '上海',    'query': '肯德基',    'output': 'json',
}
res = requests.get('https://api.map.baidu.com/place/v2/search',params=params)​print(res.text)  # 响应体内容​​### url 编码和解码​from urllib.parse import quote,unquote# s='上海'  # %E4%B8%8A%E6%B5%B7
# print(quote(s))​print(unquote('%E4%B8%8A%E6%B5%B7'))

5 携带请求头

import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
}
res = requests.get('https://dig.chouti.com/',headers=headers)
print(res.text)

6 携带cookie

import requests'''
是否登录---》有个标志1 前后端混合项目---》登录信息-->放在cookie中了2 前后端分离项目---》登录信息--》后端规定的--》放在请求头的'''### 携带cookie的第一种方式:放在cookie参数中---》cookie特殊--》后期用的频率很高
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',
}
data = {'linkId': '41566118'
}
cookie = {'token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqaWQiOiJjZHVfNTMyMDcwNzg0NjAiLCJleHBpcmUiOiIxNzEwOTAxOTY5NTM2In0.eseWTCMqp-yHa7rWgSvPhnWVhhQAgqGIvIgLGbvcBcc'
}# 没有登录---》返回的数据不是咱们想要的
res = requests.post('https://dig.chouti.com/link/vote', headers=headers, data=data, cookies=cookie)
print(res.text)

7 发送post请求

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36','Cookie': 'deviceId=web.eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqaWQiOiJiNjEzOGM2OS02ZWRlLTQ3MWItODI4Yy03YTg2ZTE3M2E3NjEiLCJleHBpcmUiOiIxNzEwOTAxNjM1MTMxIn0.JluPFMn3LLUGKeTFPyw7rVwR-BWLiG9V6Ss0RGDHjxw; Hm_lvt_03b2668f8e8699e91d479d62bc7630f1=1708309636; __snaker__id=miaeDoa9MzunPIo0; gdxidpyhxdE=lMhl43kDvnAOqQQcQs9vEoTiy8k90nSwfT3DkVSzGwu3uAQWI9jqa2GcIUvryeOY0kX6kfPuhJUAGrR6ql0iv%2F6mCzqh6DHE1%5CP%2BaIXeUQgLcfqlklCcq2V9CgWbvQRGeRaduwzkcPYwf6CXZiW9a87NxU%2BRlYq57Zq01j2gMK0BaX%2FK%3A1708310847499; token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqaWQiOiJjZHVfNTMyMDcwNzg0NjAiLCJleHBpcmUiOiIxNzEwOTAxOTY5NTM2In0.eseWTCMqp-yHa7rWgSvPhnWVhhQAgqGIvIgLGbvcBcc; Hm_lpvt_03b2668f8e8699e91d479d62bc7630f1=1708309982'
}
data = {'linkId': '41566118'
}
# 没有登录---》返回的数据不是咱们想要的
res = requests.post('https://dig.chouti.com/link/vote', headers=headers, data=data)
print(res.text)

8 post请求携带参数

import requests
# 方式一:data参数:urlencoded
# post请求:三种编码方式:json,urlencoded,form-data
# 咱们以data字典形式携带--->urlencoded编码---》最终它会被编码为---》name=lqz&age=19 -->放在请体中
# res=requests.post('地址',data={'name':'lqz','age':19})
res=requests.post('地址',data=b'name=lqz&age=19')# 方式二:json编码:json
# 咱们以json字典形式携带--->json编码---》最终它会被编码为---》{'name':'lqz','age':19} -->放在请体中
res=requests.post('地址',json={'name':'lqz','age':19})

9 模拟登录

发送post请求---》一般登录接口---》post请求---》登录成功后---》能拿到:登录信息---》以后再发请求---》携带登录信息--》就是登录状态

可见即可爬

import requestsdata = {'username': 'xxx@qq.com','password': '123','captcha': '3333','remember': '1','ref': ' http://www.aa7a.cn/',  # 登录成功,重定向到这个地址'act': 'act_login',
}
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
}
res = requests.post('http://www.aa7a.cn/user.php', headers=header, data=data)
print(res.text)
# 登录成功的cookie
cookies=res.cookies
print(cookies)# 向首页发送请求--->登录状态
res=requests.get('http://www.aa7a.cn/',cookies=cookies)
print('xxx@qq.com' in res.text)

10 session对象

# http 请求,每次都是一个新的---》cookie需要自己处理携带
# session可以自动处理cookie,不需要手动携带了

import requestssession=requests.session()
# 以后发送请求使用sessiondata = {'username': 'xxx@qq.com','password': '1233','captcha': '3333','remember': '1','ref': ' http://www.aa7a.cn/',  # 登录成功,重定向到这个地址'act': 'act_login',
}
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
}
res = session.post('http://www.aa7a.cn/user.php', headers=header, data=data)# 向首页发送请求--->登录状态res=session.get('http://www.aa7a.cn/')
print('616564099@qq.com' in res.text)

 ——session可以自动处理cookie,不需要手动携带了

11 响应对象

# response 对象---》http响应### 使用requests模块
# 发送请求:request对象:请求头,请求参数,请求体---》本质就是http请求--》被包装成一个对象
# 响应回来:response对象:http响应--》cookie,响应头,响应体。。### django框架-request:http请求-response:http响应# requests模块的response对象中有哪些东西?# 爬取图片--》图片防盗链---》referfer--》请求头中即可
import requests# header = {
#     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
# }
# respone = requests.get('https://www.jianshu.com/',headers=header)
# # respone属性
# print(respone.text)  # 响应体---》字符串形式
# print('------------')
# print(respone.content)  # 响应体---》bytes格式
# print('------------')
# print(respone.status_code)  # 响应状态码
#
# print(respone.headers)  # 响应头
# print(respone.cookies)  # 响应的cookie
# print(respone.cookies.get_dict())  # cookiejar对象--->转成字典格式
# print(respone.cookies.items())  # cookie的value值
#
# print(respone.url)  # 请求地址
# print(respone.history)  # 访问历史---》重定向,才会有
#
# print(respone.encoding)  # 编码格式# response.iter_content() # 图片,视频---》迭代着把数据保存到本地# 如果下载图片,视频。。。# 图片防盗链---》通过referer做的--》请求头中有个referer参数--》上次访问的地址
# res=requests.get('https://tupian.qqw21.com/article/UploadPic/2022-2/20222102371522350.jpg')
header={'Referer':'https://www.tupianzj.com/'
}
res=requests.get('https://img.lianzhixiu.com/uploads/allimg/180514/9-1P514153131.jpg',headers=header)
# print(res.content)
# with open('美女.jpg','wb') as f:
#     f.write(res.content)
with open('code.jpg','wb') as f:for line in res.iter_content(chunk_size=1024):f.write(line)

12 ssl 认证

http 和 https区别

    -http:超文本传输协议
    -https:安全的超文本传输协议
    -https=http+ssl/tls
    -防止:篡改,截取。。。。
    -必须有证书:才能通信

 

import requestsheader = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
}
respone = requests.get('https://www.jianshu.com/',headers=header,verify=False)
# respone = requests.get('https://www.jianshu.com/',headers=header,cert=('/path/server.crt','/path/key'))
print(respone.text)

13 使用代理

正向代理---》反向代理

代理有免费和收费的

-大神写了开源的免费代理---》原理:有些网站提供免费的代理--》爬虫技术---》爬取别人的免费代理--》验证过后---》自己用

import requestsres = requests.get('http://demo.spiderpy.cn/get/?type=https')
print(res.json())
print(res.json()['proxy'])# 112.30.155.83:12792
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
}
# respone = requests.get('https://www.jianshu.com/', headers=header, proxies={'https': res.json()['proxy']})
respone = requests.get('https://www.jianshu.com/', headers=header)
print(respone.text)

 

14 超时设置,异常处理,上传文件

超时

import requests
respone=requests.get('https://www.baidu.com',timeout=0.0001)

异常处理

import requests
from requests.exceptions import * #可以查看requests.exceptions获取异常类型try:r=requests.get('http://www.baidu.com',timeout=0.00001)
except ReadTimeout:print('===:')
# except ConnectionError: #网络不通
#     print('-----')
# except Timeout:
#     print('aaaaa')except RequestException:print('Error')

上传文件

import requests
files={'file':open('a.jpg','rb')}
respone=requests.post('http://httpbin.org/post',files=files)
print(respone.status_code)

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

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

相关文章

【开源】SpringBoot框架开发数字化社区网格管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、开发背景四、系统展示五、核心源码5.1 查询企事业单位5.2 查询流动人口5.3 查询精准扶贫5.4 查询案件5.5 查询人口 六、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的数字化社区网格管理系统&#xf…

计算机网络——10FTP

FTP FTP:文件传输协议 向远程主机上传输文件或从远程主机接收文件客户/服务器模式 客户端:发起传输的一方服务器:远程主机 ftp:RFC 959ftp服务器:端口号为21 FTP:控制连接与数据连接分开 控制连接 FTP客户端与FTP服…

辽宁博学优晨教育科技有限公司视频剪辑培训靠谱吗?

在数字媒体日益繁荣的今天,视频剪辑已成为一项炙手可热的技能。不少培训机构纷纷涉足这一领域,辽宁博学优晨教育科技有限公司便是其中之一。然而,面对众多的选择,很多人不禁要问:辽宁博学优晨教育科技有限公司的视频剪…

微服务学习Day3

文章目录 初始DockerDocker介绍Docker与虚拟机镜像和容器 Docker的基本操作镜像操作容器命令数据卷挂载数据卷 Dockerfile自定义镜像Docker-Compose介绍Docker-Compose部署微服务镜像仓库 初始Docker Docker介绍 Docker与虚拟机 镜像和容器 Docker的基本操作 镜像操作 容器命…

2.19学习总结

1.中位数 2.统计和 3.铺设道路 4.岛屿个数 5.冶炼金属 6.飞机降落 7.接龙数列 中位数https://www.luogu.com.cn/problem/P1168 题目描述 给定一个长度为 �N 的非负整数序列 �A,对于前奇数项求中位数。 输入格式 第一行一个正整数 &#xfff…

牛客——递归实现指数型枚举(枚举,dfs)

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 从 1∼n1\sim n1∼n这 n (n≤16)(n \leq 16)(n≤16) 个整数中随机选取任意多个,输出所有可能的选择方案。 输入描述: 一个整数n。 输出描述: 每行一种方案。同一行内…

关于umi ui图标未显示问题

使用ant design pro 时,安装了umi ui ,安装命令: yarn add umijs/preset-ui -D但是启动项目后,发现没有显示umi ui的图标 找了许多解决方案,发现 umi的版本问题,由于我使用的ant design pro官网最新版本&a…

备战蓝桥杯---组合数学2

本专题主要介绍容斥原理。 大家高中的时候肯定接触过韦恩图&#xff0c;容斥原理比较通俗的理解就是减去所有可能并加上重叠的部分。 我们直接看公式&#xff1a; 知道后&#xff0c;我们先看道模板题&#xff1a; 下面是AC代码&#xff1a; #include<bits/stdc.h> us…

Java 21 新特性的扫盲级别初体验

一、前言 JDK 21 于 2023 年 9 月发布&#xff0c;作为目前讨论热度最高的JDK&#xff0c;虽然大家都开玩笑说你发任你发&#xff0c;我用Java8&#xff0c;但是作为一个Javaer&#xff0c;对JDK21的新特性还是要有所了解的。 以下是 JDK 21 的新功能列表&#xff1a; 虚拟线…

下一代Windows系统曝光:基于GPT-4V,Agent跨应用调度,代号UFO

下一代Windows操作系统提前曝光了&#xff1f;&#xff1f; 微软首个为Windows而设的智能体&#xff08;Agent&#xff09; 亮相&#xff1a; 基于GPT-4V&#xff0c;一句话就可以在多个应用中无缝切换&#xff0c;完成复杂任务。整个过程无需人为干预&#xff0c;其执行成功…

【AI编程】——使用ChatGPT实现C++贪吃蛇

User 我想使用C写一个贪吃蛇小游戏以下是ChatGPT的回答 为了创建一个贪吃蛇小游戏&#xff0c;我们将遵循以下步骤来组织我们的计划&#xff1a; 初始化游戏环境&#xff1a; 设置游戏窗口大小。初始化蛇的起始位置。放置初始食物。 游戏循环逻辑&#xff1a; 处理用户输入。…

sql报错注入 之 floor 函数报错:主键重复

Mysql报错注入之floor报错详解 updatexml extractvalue floor 是mysql的函数 groupbyrandfloorcount 一、简述 利用 select count(*),(floor(rand(0)*2))x from table group by x&#xff0c;导致数据库报错&#xff0c;通过 concat 函数&#xff0c;连接注入语句与 floor…

【JavaEE】网络原理: UDP协议和TCP协议的相关内容

目录 1. 应用层 2. 传输层 2.1 端口号 2.2 UDP协议 2.3 TCP协议 1.确认应答 2.超时重传 3.连接管理 三次握手 四次挥手 状态转换 4.滑动窗口 5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答 9.面向字节流 粘包问题 10.异常情况 网络通信中, 协议是一个非常重…

75.SpringMVC的拦截器和过滤器有什么区别?执行顺序?

75.SpringMVC的拦截器和过滤器有什么区别&#xff1f;执行顺序&#xff1f; 区别 拦截器不依赖与servlet容器&#xff0c;过滤器依赖与servlet容器。拦截器只能对action请求(DispatcherServlet 映射的请求)起作用&#xff0c;而过滤器则可以对几乎所有的请求起作用。拦截器可…

比特币原生 L2 解决方案 Merlin Chain梅林链科普(bitget wallet)

什么是梅林链&#xff1f; Merlin Chain 是由 Bitmap Tech&#xff08;以前称为 Recursiverse&#xff09;背后的团队开发的比特币第 2 层解决方案。 Merlin Chain 专注于利用比特币的独特属性&#xff0c;旨在释放其未开发的潜力。从技术上来说&#xff0c;梅林链集成了零知识…

【数学建模入门】

数学建模入门 数学建模需要的学科知识怎么学习数学模型如何读好一篇优秀论文数学建模赛题常见类别数学建模常见问题数学建模组队和分工数学建模准备工作 数学建模需要的学科知识 怎么学习数学模型 &#x1f4a6;推荐阅读书籍&#xff1a; 《数学建模算法与应用》&#xff0c;…

AI时代Python金融大数据分析实战:ChatGPT让金融大数据分析插上翅膀

目录 引言 1. Python在股票市场分析中的应用 2. 投资组合优化 3. 风险管理与预测 时间序列分析 机器学习在风险预测中的应用 大数据分析与风险建模 总结 ⭐️ 好书推荐 【内容简介】 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默…

【嵌入式】CAN总线

1 简介 CAN 是控制器局域网络 (Controller Area Network) 的简称,它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的,并最终成为国际标准(ISO11519),是国际上应用最广泛的现场总线之一。 CAN 总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线…

专业140+总分420+浙江大学842信号系统与数字电路考研经验电子信息与通信,真题,大纲,参考书。

今年考研已经结束&#xff0c;初试专业课842信号系统与数字电路140&#xff0c;总分420&#xff0c;很幸运实现了自己的目标&#xff0c;被浙大录取&#xff0c;这在高考是想都不敢想的学校&#xff0c;在考研时实现了&#xff0c;所以大家也要有信心&#xff0c;通过自己努力实…

LeetCode42.接雨水(单调栈)

题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 &#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,…
推荐文章