基础爬虫篇

文章目录

  • 爬虫介绍
  • requsets模块和快速使用
  • 携带请求头
  • 携带cookie的两种方式
  • post携带参数
  • 模拟登录 取出cookie和处理cookie
  • 响应对象
  • 证书
  • 使用代理
  • 超时 异常处理 上传文件

爬虫介绍

# 爬虫是什么?-通过编程技术---》把互联网中的数据---》获取到---》数据清洗---》存到库中python:request,selenium---》app,小程序,网站---》xpaht,lxml---》mysql,redis,文件,excel,mongodb-通过编程语言---》模拟发送http请求---》获取数据---》解析--》入库-爬取过程 解析过程 会遇到反扒-抓app,小程序---》抓包工具---》抓取手机发送的所有请求-charles-Fiddler# 爬虫 有爬虫协议-君子协议-https://xxx/robots.txt
# 百度 是个大爬虫-百度/谷歌 搜索引擎---》启动了一个爬虫---》一刻不停的在互联网中爬取网站---》存到库中(es)-用户在百度输入框中---》输入搜索内容---》去百度的库中搜索--》返回给前端---》前端点击---》去了真正的地址-seo 优化-不花钱---》搜索关键词的结果---》排的靠前-伪静态-sem 优化-花钱买关键词

requsets模块和快速使用

import requests# gie携带参数
# 第一种 直接写在地址栏中
res = requests.get('https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295&region=上海&query=肯德基&output=json')
print(res.text)# 第二种
params = {} 
params = {'ak': '6E823f587c95f0148c19993539b99295','region': '上海','query': '肯德基','output': 'json',
}res = requests.get('https://api.map.baidu.com/place/v2/search', params=params)
print(res.text)# 编码与解码
from urllib.parse import quote,unquote
s='上海'  # %E4%B8%8A%E6%B5%B7
print(quote(s))print(unquote('%E4%B8%8A%E6%B5%B7'))

携带请求头

import requests# 携带请求头 如果程序模拟的不像 访问不到数据
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'
}
res = requests.get('https://dig.chouti.com/',headers=headers)print(res.text)

携带cookie的两种方式

# 发送post请求
# 请求头的参数必带
# 携带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',# 登录之后回返回cookie 没有登录---》返回的数据不是咱们想要的'Cookie': 'token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqaWQiOiJjdHVfNzA4NjEwMzY4NTkiLCJleHBpcmUiOiIxNzExMjAyMzY4ODAyIn0.TnUYjU6KqR1itEW6QkTSSUfqc48rkT3hnsg4Cvh4XA4; path=/; Max-Age=2592000',
}
# 你点赞作品的id号
data = {'linkId': '41601398'
}
# 在请求头中注意点赞的地址
res = requests.post('https://dig.chouti.com/link/vote',headers=headers,data=data)
print(res.text)# 第二种携带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': '41600539'
}
cookie = {# 如果不成功 继续携带参数测试'token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqaWQiOiJjdHVfNzA4NjEwMzY4NTkiLCJleHBpcmUiOiIxNzExMjAyMzY4ODAyIn0.TnUYjU6KqR1itEW6QkTSSUfqc48rkT3hnsg4Cvh4XA4; path=/; Max-Age=2592000',
}
# 没有登录---》返回的数据不是咱们想要的
res = requests.post('https://dig.chouti.com/link/vote', headers=headers, data=data, cookies=cookie)
print(res.text)

post携带参数

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

模拟登录 取出cookie和处理cookie

import requests
# 第一种方式
import requestsdata = {'username': '616564099@qq.com','password': 'lqz123111','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('616564099@qq.com' in res.text)# 第二种
import requests
session = requests.session()
# 以后发送请求使用sessiondata = {'username': '616564099@qq.com','password': 'lqz12311','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'
}
# session自动获取cookie并且携带过去
res = session.post('http://www.aa7a.cn/user.php', headers=header, data=data)# 向首页发送请求--->登录状态
res1 = session.get('http://www.aa7a.cn/')# 登录成功之后可以判断一下用户之后在不在登录页面
print('616564099@qq.com' in res1.text)

响应对象

# response 对象---》http响应### 使用requests模块
# 发送请求:request对象:请求头,请求参数,请求体---》本质就是http请求--》被包装成一个对象
# 响应回来:response对象:http响应--》cookie,响应头,响应体。。# 爬取图片--》图片防盗链---》referfer--》请求头中即可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)
# respone属性
print(respone.text)  # 响应体---》字符串形式print(respone.content)  # 响应体---》bytes格式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)  # 编码格式res = respone.iter_content() # 图片,视频---》迭代着把数据保存到本地===========================
# 如果下载图片,视频。。。# 图片防盗链---》通过referer做的--》请求头中有个referer参数--》上次访问的地址
# res=requests.get('https://tupian.qqw21.com/article/UploadPic/2022-2/20222102371522350.jpg')import requestsheader = {'Referer': 'http://www.baidu.com'  # 从哪里访问的
}
res = requests.get('https://meizi5.com/wp-content/uploads/2024/02/VOL_181_1.jpg', headers=header)
print(res.url)
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)

证书

# http  和 https-http:超文本传输协议-https:安全的超文本传输协议-https=http+ssl/tls-防止:篡改,截取。。。。-必须有证书:才能通信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,verify=False)#  加上这个就不验证证书
# respone = requests.get('https://www.jianshu.com/',headers=header,cert=('/path/server.crt','/path/key'))
print(respone.text)

使用代理

import requests
# 免费代理池 很少有用的 发一个请求取出一次代理
res = requests.get('http://demo.spiderpy.cn/get/?type=https')
print(res.json())
print(res.json()['proxy']) # 取出代理
# 112.30.155.83:12792header = {'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'
}
# proxies={'https': res.json()['proxy']} 使用代理获取数据 如果代理用不了 则是连接失败
response = requests.get('https://www.jianshu.com/', headers=header, proxies={'https': res.json()['proxy']})
print(response.text)

超时 异常处理 上传文件

## 超时 自己设置一个时间 超过时间数据没请求会来就报错
import requests
respone=requests.get('https://www.baidu.com',timeout=1)# 异常处理
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.mzph.cn/news/698741.shtml

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

相关文章

一次路由多次交换的概念与用处

“一次路由多次交换”是指在网络中,数据包首次被路由后,随后相同流的数据包在二层通过交换方式传输,不再需要路由处理。 具体来说,这个过程涉及到以下几个关键点: 路由与交换:路由是指根据IP地址将数据包…

第2讲:C语言数据类型和变量

第2讲:C语言数据类型和变量 目录1.数据类型介绍1.1字符型1.2整型1.3浮点型1.4 布尔类型1.5 各种数据类型的长度1.5.1 sizeof 操作符1.5.2 数据类型长度1.5.3 sizeof 中表达式不计算 2.signed 和 unsigned3.数据类型的取值范围4. 变量4.1 变量的创建4.2 变量的分类 5…

oracle中trim函数、ltrim函数、rtrim函数的使用方法,trim()函数、ltrim ()函数、rtrim()函数的用法

在oracle中,trim()函数的用法有,leading 开头字符,trailing 结尾字符,both 开头和结尾字符,如下: trim(leading || trailing || both 将要被替换掉的字符" from “将要被替换的字符串") 1、trim函数去除指…

opencv判断二值的情况

目的 先说说理论: 什么叫图像的二值化?二值化就是让图像的像素点矩阵中的每个像素点的灰度值为0(黑色)或者255(白色),也就是让整个图像呈现只有黑和白的效果。在灰度化的图像中灰度值的范围为0…

kafka为什么性能这么高?

Kafka系统架构 Kafka是一个分布式流处理平台,具有高性能和可伸缩性的特点。它使用了一些关键的设计原则和技术,以实现其高性能。 上图是Kafka的架构图,Producer生产消息,以Partition的维度,按照一定的路由策略&#x…

人工智能和机器学习中深度学习、自然语言处理、计算机视觉详细介绍和java代码实现、数据模型训练

人工智能和机器学习领域详细介绍及Java代码实现 1. 深度学习 介绍: 深度学习是一种机器学习技术,通过多层神经网络对数据进行学习和表征。Java实现: 使用深度学习库如DL4J(DeepLearning4j)来构建和训练深度神经网络模型。数据模型训练: 示例代码如下:public class Deep…

C++力扣题目 392--判断子序列 115--不同的子序列 583--两个字符串的删除操作 72--编辑操作

392.判断子序列 力扣题目链接(opens new window) 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,&quo…

代码随想录算法训练营day36 | 435. 无重叠区间、763.划分字母区间、56. 合并区间

435. 无重叠区间 基于左边界排序 class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:count 0 # 需要移除的区间数量intervals.sort(keylambda x: x[0])for i in range(1, len(intervals)):if intervals[i][0] < intervals[i-1][1]…

【Logback】如何在项目中快速引入Logback日志?

目录 1、引入相关依赖或者 jar 包 2、使用logback日志 3、引入logback配置文件 4、打印logback内部状态信息 Logback 是 Java 社区中使用最广泛的日志框架之一。它是其前身 Log4j 的替代品。Logback 比所有现有的日志框架速度更快&#xff0c;占用空间更小&#xff0c;而且…

【讨论】Web端测试和App端测试的不同,如何说得更有新意?

Web 端测试和 App 端测试是针对不同平台的上的应用进行测试&#xff0c;Web应用和App端的应用实现方式不同&#xff0c;测试时的侧重点也不一样。 Web端应用和App端应用的区别&#xff1a; 平台兼容性 安装方式 功能和性能 用户体验 更新和维护 测试侧重点有何不同 平台…

HGAME week2 web

1.What the cow say? 测试发现可以反引号命令执行 ls /f* tac /f*/f* 2.myflask import pickle import base64 from flask import Flask, session, request, send_file from datetime import datetime from pytz import timezonecurrentDateAndTime datetime.now(timezone(…

【Java】类与对象(实验二)

目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 掌握类的定义与对象的创建。理解构造方法和this关键字的用法。掌握对象对于属性及方法的引用。 二、实验内容 1、编写一个Java程序&#xff0c;定义一个表示学生的类Student&#xff0c;该类包括: (1)这个类的…

HarmonyOS—使用低代码开发应用或服务

使用低代码开发应用或服务有以下两种开发方式&#xff1a; 创建一个支持低代码开发的新工程&#xff0c;开发应用或服务的UI界面。在已有工程中&#xff0c;创建Visual文件来开发应用或服务的UI界面。 ArkTS工程和JS工程使用低代码的步骤相同&#xff0c;接下来以JS工程为例分…

VantUI组件的安装和使用

Vant UI 是一款轻量、可靠的移动端 Vue 组件库&#xff0c;适用于构建高性能的移动端页面。它提供了丰富的组件&#xff0c;如按钮、输入框、弹窗、轮播等&#xff0c;并且具有灵活的配置和扩展性。Vant UI 的设计风格简洁&#xff0c;易于上手&#xff0c;能够满足大部分移动端…

《Effective C++》《构造/析构/赋值运算——6、若是不想使用编译器自动生成的函数,就该明确拒绝》

文章目录 1、term6:Explicitly disallow the use of compiler-generated functions you do not want方案1:实现空的copy构造和copy赋值&#xff0c;并将其声明为private方案2:只做声明&#xff0c;不提供实现方案3:继承UnCopyable这样一个空基类&#xff0c;该基类将拷贝构造函…

exe4j将java项目打包为exe包(无需每台机器上安装jdk)

这里写目录标题 背景过程打jar包1、修改pom文件2、maven命令打jar包 下载exe4j工具1.首先去官网下载 exe相关配置1、填写密钥2、选择jar包格式3、设置名称以及输出exe位置4、设置图标及设置操作系统版本5、设置要导入的jar包&#xff0c;以及启动类6、设置jdk版本范围7、设置jd…

【2024软件测试面试必会技能】Appium自动化(6):原生app元素定位方法

元素定位方法介绍及应用&#xff1a; Appium方法定位原生app元素: 通过appium inspector工具&#xff0c;可以获取元素的相关信息&#xff1b;在appium中提供了一系列的元素定位API&#xff0c;通过在这些API中输入指定的元素信息&#xff0c;就能完成元素定位&#xff0c;定…

深入攻克并了解权限ACL

一、ACL使用 1.1、ACL中mask修改最大权限 什么是最大权限&#xff0c;看下面的信息&#xff1a; [rootlocalhost ~]# getfacl /project getfacl: Removing leading / from absolute path names # file: project # owner: root # group: tgroup user::rwx# 所属用户权限 user…

C# cass10 面积计算

运行环境Visual Studio 2022 c# cad2016 cass10 通过面积计算得到扩展数据&#xff0c;宗地面积 &#xff0c;房屋占地面积&#xff0c;房屋使用面积 一、主要步骤 获取当前AutoCAD应用中的活动文档、数据库和编辑器对象。创建一个选择过滤器&#xff0c;限制用户只能选择&q…

究竟做老隋分享的temu蓝海项目怎么样?这些要点要关注

近年来&#xff0c;跨境电商成为了一股热潮&#xff0c;许多企业纷纷投身其中&#xff0c;希望能够分得一杯羹。其中&#xff0c;Temu项目备受关注。本文将从可靠性角度分析Temu蓝海项目&#xff0c;帮助您了解其优势和潜在风险。 一、 Temu项目的背景与可靠性 Temu是由拼多多推…