爬虫(持续更新ing)
爬虫(持续更新ing)
# 网络请求
# url统一资源定位符(如:https://www.baidu.com)
# 请求过程:客户端的web浏览器向服务器发起请求
# 请求又分为四部分:请求网址,请求方法(get、post、put等),请求头,请求体
# 浏览器中一般都在f12中去看,推荐谷歌会清晰一点
# 爬虫概念:模拟浏览器发送请求获取响应
# 反爬概念:保护重要数据,阻止恶意网络攻击
# 反反爬:针对反爬做防御措施
# 爬虫的作用:1、数据采集 2、软件测试 3、抢票 4、网络安全 5、web漏洞扫描
# 通过爬取网站的数量分类:通用爬虫(如搜索引擎)、聚焦爬虫(如12306抢票)就是专门爬某个网站的数据, 通用爬虫爬取网站数量没有上线,聚焦爬虫:爬取网站数量有限,有明确目标
# 聚焦爬虫根据获取数据为目的分类:功能性爬虫、数据增量爬虫 功能性爬虫不获取数据,只为了实现某种功能,如投票、抢票、短信轰炸等 数据增量爬虫获取数据用于后续分析,url与数据同时变化,则整条新数据,url不变,数据变化,数据部分更新
# 爬虫基本流程:url->对url发送网络请求,获取浏览器的请求响应->解析响应,提取数据->保存数据
# robots协议,有些时候无法获取时,可以修改robots# 网络通信
# 浏览器:url
# DNS服务器:ip地址标注服务器
# DNS服务器返回ip地址给浏览器
# 浏览器拿到ip地址去访问服务器,返回响应
# 服务器返回的数据可能是js,hmtl,jpg等等
# 网络通信的实际原理:一个请求对一个数据包(文件)
# 之后抓包可能会有很多个数据包,共同组成了这个页面# http协议和https协议
# http协议规定了服务器和客户端互相通信的规则
# http协议:超文本传输协议,默认端口80
# 超文本:不仅仅限于文本,还可以是图片、音频、视频
# 传输协议:使用共用约定的固定格式来传递换成字符串的超文本内容
# https协议:http+ssl(安全套接字层) 默认端口443
# ssl对传输内容进行加密
# https比http更安全,但是性能更低
# http请求/响应的步骤:1、客户端连接web服务器 2、发送http请求 3、服务器接收请求返回响应 4、释放连接tcp连接 5、客户端解析html内容# 请求头
# 请求方式 get/post、put等
# get一般来说都是想服务器要数据的详情接口,而post一般是给服务器数据,提交接口
# user-agent:这个是模拟正常用户的操作关键
# cookies:这个是登录保持,一般老一点的网站用这个,新的都用token
# referer:当前这一次请求是从哪个请求过来的
request模块
# 依赖安装 pip install requests
# 文本,html,css等字符串形式
import requests
url='https://www.baidu.com'
res=requests.get(url)
# text 这个方式内容会乱码,str类型,request模块自动根据http头部对响应编码做出有根据的推测
# res.encoding='utf-8' 当然你也可以指定编码类型
# print(res.text)
# content bytes类型,可以通过decode进行解码 打印响应,这个是解码后的,默认进行utf-8
print(res.content.decode())
# 这个就是把这个内容保存为html
# with open('baidu.html','w',encoding='utf-8') as h:
# h.write(res.content.decode())
#输出 这样就把所有的https://www.baidu.com请求拿到了
# 打印响应的url
print('url',res.url)
# 打印响应对象的请求头
print('request headers',res.request.headers)
# 打印响应头
print('res headers',res.headers)# 图片 把图片存到img下面
import requests
url='https://www.baidu.com/img/flexible/logo/pc/result.png'
res=requests.get(url)
with open('./img/jwq.png','wb') as img:img.write(res.content)# 模拟浏览器发送请求
import requests
url='https://www.baidu.com'
# 构建请求头 user-agent添加的目的是为了让服务器认为我们是浏览器发送的请求,而不是爬虫软件
headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36'
}
# headers参数接收字典形式的请求头
res=requests.get(url,headers=headers)
print(res.content.decode())
print(len(res.content.decode())) #查看这个响应内容的长度
print(res.request.headers) #查看响应对象的请求头# user-agent池 为了防止反爬
# 先演示手动添加的user_agents池
import requests
import random
url='https://www.baidu.com'
# 构建 user_agents池
user_agents = ['Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60','Opera/8.0 (Windows NT 5.1; U; en)','Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0','Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2 ','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11','Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36','Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)','Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0) ',
]
ua=random.choice(user_agents)
# 构建请求头 user-agent添加的目的是为了让服务器认为我们是浏览器发送的请求,而不是爬虫软件
headers={'user-agent':ua
}
# headers参数接收字典形式的请求头
res=requests.get(url,headers=headers)
# print(res.content.decode())
print(len(res.content.decode()))
print(res.request.headers)# 使用三方库 fake-useragent
# 安装 pip install fake-useragent
from fake_useragent import UserAgent
# 构建 user_agents池
ua = UserAgent()
# 获取随机浏览器用户代理字符串
print(ua.random)# 使用param携带参数 quote 明文转密文 unquote 密文转明文
import requests
from fake_useragent import UserAgent
from urllib.parse import quote,unquote
# quote 明文转密文
# unquote 密文转明文
# print(quote('学习'))
# print(unquote('%E5%AD%A6%E4%B9%A0'))
# 构建 user_agents池
ua = UserAgent()
url='https://www.baidu.com/s'
# 你要是不想使用params的话,你可以使用模板语法
# url=f'https://www.baidu.com/s?wd={name}'
#构建请求参数
name=input('请输入关键词:')
params={'wd':name
}
headers={'user-agent':ua.random
}
# 通过params携带参数
res=requests.get(url,headers=headers,params=params)
print(res.content.decode())# 获取网易云的图片
import requests
from fake_useragent import UserAgent
ua = UserAgent()
url='https://p1.music.126.net/_JcHT6u-TYhxjDbO3IhVQA==/109951170537166630.jpg?imageView&quality=89'
headers={# 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36''user-agent':ua.random
}
# 通过params携带参数
res=requests.get(url,headers=headers)
# print(res.content.decode())
with open('img/网易云.jpg','wb') as f:f.write(res.content)# 获取qq音乐音频
import requests
from fake_useragent import UserAgent
ua = UserAgent()
url='https://ws6.stream.qqmusic.qq.com/RS02064dfdIM38rSZY.mp3?guid=7976864250&vkey=AE4590431EAD34766DBAA9BA1A3715B3B45721EE23180669EA694EB7CA1F0DB4C8DE867A9883D4E897ED4E6F2ECF600CDFD34C78F2C07E09__v215192d1e&uin=554242051&fromtag=120052'
headers={# 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36''user-agent':ua.random
}
# 通过params携带参数
res=requests.get(url,headers=headers)
# print(res.content.decode())
with open('video/晴天.mp3','wb') as f:f.write(res.content)# 获取qq音乐mv
import requests
from fake_useragent import UserAgent
ua = UserAgent()
url='https://mv6.music.tc.qq.com/44B177558A20632E722F75FB6A67025F0BFC15AB98CC0B58FD3FC79E00B2EEDC9FAC3DF26DD0A319EACA6B2A30D24E2CZZqqmusic_default__v21ea05e5a/qmmv_0b53feaagaaao4ae4d5t4vtvikiaamuqaa2a.f9944.ts'
headers={# 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36''user-agent':ua.random
}
# 通过params携带参数
res=requests.get(url,headers=headers)
# print(res.content.decode())
with open('video/qq音乐.mp4','wb') as f:f.write(res.content)# 获取百度贴吧 翻页
import requests
from fake_useragent import UserAgent
ua = UserAgent()
url='https://tieba.baidu.com/f?'
name=input('请输入关键词:')
page=int(input('请输入要保存的页数:'))
for i in range(page):params = {'kw': name,'ie': 'utf-8','pn': 0}headers = {'user-agent': ua.random}# 通过params携带参数res = requests.get(url, headers=headers,params=params)# print(res.content.decode())with open(f'html/{name}{i+1}.html', 'wb') as f:f.write(res.content)# 获取百度贴吧转换为面向对象方式
import requests
from fake_useragent import UserAgent
class TieBa:def __init__(self):self.url='https://tieba.baidu.com/f?'self.headers = {'user-agent': UserAgent().random}# 发起请求def send(self,params):# 通过params携带参数res = requests.get(self.url, headers=self.headers,params=params)return res.text# 保存def save(self,page,con):with open(f'html/{page}.html', 'w',encoding='utf-8') as f:f.write(con)# 程序运行def run(self):name = input('请输入关键词:')pages = int(input('请输入要保存的页数:'))for page in range(pages):params = {'kw': name,'ie': 'utf-8','pn': pages * 50}data=self.send(params)self.save(page,data)
te =TieBa()
te.run()# 金山翻译 post
import requests
from fake_useragent import UserAgent
import jsonurl = 'https://ifanyi.iciba.com/index.php?c=trans'
headers = {'user-agent': UserAgent().random
}
name=input('请输入翻译内容:')
post_data = {'from': 'zh','to': 'en','q': name,
}
res = requests.post(url, headers=headers,data=post_data)
res.encoding = 'utf-8'
dict=json.loads(res.text)
print(dict['out'])# 下面就是中文的翻译
#输入 请输入翻译内容:中文
#输出 the Chinese language# 代理
# 分为正向代理和反向代理
# 正向代理:给客户端做代理,让服务器不知道客户端的真实身份(说句实在话就是保护自己的ip不会暴露,要封也是封代理ip)
# 反向代理:给服务器做代理,让浏览器不知道服务器的真实地址
# 正向代理保护客户端,反向代理保护服务端
# 实际上理论应该分为三类:透明代理(服务器知道我们使用了代理ip,也知道真实ip)、匿名代理(服务器能够检测到代理ip,但是无法知道真实ip)、高匿代理(服务器既不知代理ip,也不知道真实ip)
# proxies代理
import requests
from fake_useragent import UserAgent
url='https://www.baidu.com'
headers={'user-agent':UserAgent().random
}
# 构建代理字典
proxies={'http':'1.1.1.1:9527','https':'1.1.1.1:9527'
}
res=requests.get(url,headers=headers,proxies=proxies)
print(res.content.decode())
相关文章:
爬虫(持续更新ing)
爬虫(持续更新ing) # 网络请求 # url统一资源定位符(如:https://www.baidu.com) # 请求过程:客户端的web浏览器向服务器发起请求 # 请求又分为四部分:请求网址,请求方法(…...
AD学习-最小系统板,双层
第一章 简单电阻容模型的创建 捕捉栅格在摆放器件时,一般设置成 10mil。移动器件时一般设置成100mil。 比如绘制电容的原理图库,直接就是两根线条竖着成电容, 按Tab键进行颜色变更,按shift键拖动会复制一个出来。 …...
自动驾驶---不依赖地图的大模型轨迹预测
1 前言 早期传统自动驾驶方案通常依赖高精地图(HD Map)提供道路结构、车道线、交通规则等信息,可参考博客《自动驾驶---方案从有图迈进无图》,本质上还是存在问题: 数据依赖性高:地图构建成本昂贵…...
【五.LangChain技术与应用】【8.LangChain提示词模板基础:从入门到精通】
早上八点,你端着咖啡打开IDE,老板刚甩来需求:“做个能自动生成产品描述的AI工具”。你自信满满地打开ChatGPT的API文档,结果半小时后对着满屏的"输出结果不稳定"、"格式总出错"抓耳挠腮——这时候你真需要好好认识下LangChain里的提示词模板了。 一、…...
【AGI】智谱开源2025:一场AI技术民主化的革命正在到来
智谱开源2025:一场AI技术民主化的革命正在到来 引言:开源,一场技术平权的革命一、CogView4:中文AI生成的里程碑1. 破解汉字生成的“AI魔咒”2. 开源协议与生态赋能 二、AutoGLM:人机交互的范式跃迁1. 自然语言驱动的跨…...
Markdown HTML 图像语法
插入图片 Markdown 一般来说,直接复制粘贴过来就行了,部分网页/应用可以拖拽,没人会真敲图片的链接吧…… 示例图片: 总架构师,15年工作经验,精通Java编…...
国产化替换案例:CACTER邮件网关为Groupwise系统加固邮件安全防线
电子邮件作为企业信息流转的命脉,承载着商业机密与客户数据。然而,网络攻击手段日益复杂,钓鱼邮件等威胁正快速侵蚀企业安全防线。据《2024年第四季度企业邮箱安全性研究报告》显示,2024年Q4企业邮箱用户遭遇的钓鱼邮件数量激增至…...
Element UI-Select选择器结合树形控件终极版
Element UI Select选择器控件结合树形控件实现单选和多选,并且通过v-model的方式实现节点的双向绑定,封装成vue组件,文件名为electricity-meter-tree.vue,其代码如下: <template><div><el-select:valu…...
《底层逻辑》总结书摘
《底层逻辑》由张羽所著,聚焦于职场与个人发展,深入阐述了定位、结果、学习等十大底层逻辑,旨在帮助读者掌握思考和解决问题的有效方法,提升职场竞争力与个人成就。 核心观点:思维和行动决定命运,格局与价值…...
【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(未成功版)
【Linux】【网络】UDP打洞–>不同子网下的客户端和服务器通信(未成功版) 上次说基于UDP的打洞程序改了五版一直没有成功,要写一下问题所在,但是我后续又查询了一些资料,成功实现了,这次先写一下未成功的…...
【微信小程序】每日心情笔记
个人团队的比赛项目,仅供学习交流使用 一、项目基本介绍 1. 项目简介 一款基于微信小程序的轻量化笔记工具,旨在帮助用户通过记录每日心情和事件,更好地管理情绪和生活。用户可以根据日期和心情分类(如开心、平静、难过等&#…...
PMP项目管理—沟通管理篇—3.监督沟通
文章目录 基本信息4W1HITTO输入工具与技术输出 工作绩效信息和变更请求 基本信息 4W1H what: 确保满足项目及其相关方的信息需求的过程。why: 通过监督沟通过程,来确定规划的沟通工作和沟通活动是否如预期,提高或保持了相关方对项目可交付成果与预计结…...
在Linux中开发OpenGL——检查开发环境对OpenGL ES的支持
由于移动端GPU规模有限,厂商并没有实现完整的OpenGL特性,而是实现了它的子集——OpenGL ES。因此如果需要开发的程序要支持移动端平台,最好使用OpenGL ES开发。 1、 下载支持库、OpenGL ES Demo 1.1、下载PowerVRSDK支持库作为准备ÿ…...
低空经济-飞行数据平台 搭建可行方案
搭建一个飞行数据平台是低空经济中至关重要的一环,它能够实现对飞行器的实时监控、数据分析、路径优化以及安全管理。以下是搭建飞行数据平台的详细步骤和技术方案: 一、平台的核心功能 实时监控: 实时获取飞行器的位置、速度、高度、电池状态等数据。提供可视化界面,展示飞…...
python量化交易——金融数据管理最佳实践——使用qteasy大批量自动拉取金融数据
文章目录 使用数据获取渠道自动填充数据QTEASY数据拉取功能数据拉取接口refill_data_source()数据拉取API的功能特性多渠道拉取数据实现下载流量控制实现错误重试日志记录其他功能 qteasy是一个功能全面且易用的量化交易策略框架, Github地址在这里。使用它&#x…...
为AI聊天工具添加一个知识系统 之136 详细设计之77 通用编程语言 之7
问题 Q1492、针对前面您给出的“AI聊天工具知识系统设计文档”,请就您后面所述“智能进化:认知演进路由驱动知识库持续优化”进行更深入的实现讨论 Q1493、感觉不够完整。下面我们针对您前面给出的“知识系统三层架构详述”逐层给出详细地实现方案。 …...
【CSRF实践】DVWA靶场之CSRF实践
CSRF介绍 CSRF(Cross-site request forgery),中文名叫做“跨站请求伪造”,也被称作“one click attack/session riding”,缩写为“CSRF/XSRF”。在场景中,攻击者会伪造一个请求(通常是一个链接)࿰…...
数据库设计方面如何进行PostgreSQL 17的性能调优?
在数据库设计方面,PostgreSQL 17 的性能调优可以从以下几个方面入手: 表结构设计 选择合适的数据类型:根据数据的实际范围和业务需求,选择占用空间小、查询效率高的数据类型。对于固定长度的字符串,如性别字段&#…...
[场景题]如何实现购物车
1. 基于Session的购物车(适合小型单体应用) 核心思路:将购物车数据存储在用户会话(Session)中,适用于无需持久化的临时购物车。 实现步骤: 数据结构:使用Map<商品ID, 商品数量&g…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
