from lxml import etree
from urllib.request import urlretrieve
import os
import asyncio
import aiohttp
import aiofiles
import requests
# 异步爬虫,不能使用requests库,因为requests是一个同步的,
# 想要异步发送网络请求,需要使用:aiohttp库,需要安装 pip install aiohttp
# 异步爬虫下载图片也不可以使用urlretrieve,因为它也是同步的
# 异步文件操作,需要用到aiofiles这个库,需要安装 pip install aiofiles
# 哪些地方需要加await
# 如果返回的是一个awaitable对象,就要加await, 例如:协程、Task、Future
# 同步
class TongbuDoutulaSpider(object):
def __init__(self):
self.base_url = "https://www.doutula.com/photo/list/?page={}"
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"
}
def parse_page(self, url):
response = requests.get(url, headers=self.headers)
html = response.text
praser = etree.HTML(html)
emoji_url_list = praser.xpath("//div[contains(@class, page-content)]//a//img/@data-original")
for emoji_url in emoji_url_list:
# http://img.doutula.com/production/uploads/image/2020/08/29/20200829662145_CnAErN.jpg
emoji_name = emoji_url.split("/")[-1]
emoji_path = os.path.join("emoji", emoji_name)
urlretrieve(emoji_url, emoji_path)
print("{}表情下载成功".format(emoji_name))
def run(self):
# 爬取10页
for i in range(1, 11):
page_url = self.base_url.format(i)
# 解析页面数据
self.parse_page(page_url)
break
class DoutulaSpider(object):
def __init__(self):
self.base_url = "https://www.doutula.com/photo/list/?page={}"
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"
}
async def parse_page(self, url):
# async with:是一个语法
async with self.session.get(url) as response:
html = await response.text()
praser = etree.HTML(html)
emoji_url_list = praser.xpath("//div[contains(@class, page-content)]//a//img/@data-original")
for emoji_url in emoji_url_list:
# http://img.doutula.com/production/uploads/image/2020/08/29/20200829662145_CnAErN.jpg
emoji_name = emoji_url.split("/")[-1]
emoji_path = os.path.join("emoji", emoji_name)
async with self.session.get(emoji_url) as emoji_response:
# open("abc.jpg") 不能使用open打开文件写入,这样做是同步的,会导致异步代码不会异步执行
async with aiofiles.open(emoji_path, "wb") as f:
data = await emoji_response.read()
await f.write(data)
print("{}表情下载成功".format(emoji_name))
async def run(self):
self.session = aiohttp.ClientSession(headers=self.headers)
# 爬取10页
for i in range(1, 11):
page_url = self.base_url.format(i)
# 解析页面数据
await self.parse_page(page_url)
break
# 最后关闭session
await self.session.close()
if __name__ == '__main__':
# 同步启动方式
# spider = TongbuDoutulaSpider()
# spider.run()
# 异步启动方式
spider = DoutulaSpider()
asyncio.run(spider.run())
相关推荐
反爬虫策略:使用FastAPI限制接口访问速率
FastAPI 是一个现代、快速(高性能)的 web 框架,用于构建 API。它旨在使开发人员能够快速、简单地设计和构建 API。FastAPI 提供了许多内置的功能,使其成为构建反爬虫策略的理想选择。网络爬虫的威胁不容忽视,为了保护数据安全和维护服务的正常运行,我们需要采取有效的反爬虫策略。FastAPI 提供了强大的功能和灵活性,使开发人员能够快速构建有效的反爬虫策略。通过合理地使用访问频率限制、用户识别与验证、动态调整策略等策略,我们可以更好地保护数据安全和维护服务的正常运行。
【Python】Scrapy整合FastAPI实现爬虫API 附大量示例
1. Scrapy + FastAPI 项目创建 2. Scrapy 原理 3. Scrapy 示例 4. FastAPI + Alchemy 接口&持久化解决方案
Reddit子版块热门内容分析:使用Python爬虫探索全球网友兴趣点
官方推荐的Reddit API Python封装库- 用于异步高效爬取- 数据处理与分析- 数据可视化- 自然语言处理与情感分析FastAPI- 可选的数据API服务本文详细介绍了使用Python进行Reddit子版块热门内容分析的完整流程,涵盖了从数据采集、处理分析到可视化的各个环节。通过结合现代Python技术栈,我们构建了一个强大、可扩展的分析框架。全面性:覆盖数据采集、清洗、分析、可视化全流程现代化:使用异步编程、类型提示等现代Python特性可扩展:模块化设计便于功能扩展和定制实用性。
Fastapi和requests文件的下载和上传
FastApi搭建一个简单下载和上传的服务,通过接口将文件保存在服务器上,而通过requests库子在本机中批量从服务器上传和下载文件。
fastAPI-aiohttp-example:如何使用fastAPI和aiohttp客户端
带有客户端的完整 这是FastAPI的一个示例,但是您可以将此逻辑与任何异步(ASGI)Web框架一起使用 实现的逻辑: (带有aiohttp的假服务器模拟答案) 在FastAPI启动时打开ClientSession 在fastAPI关闭时关闭ClientSession 测验 fastAPI端点测试 aiohttp测试
基于 fastapi 的爬虫可视化调度系统源码+项目说明.zip
基于 fastapi 的爬虫可视化调度系统源码+项目说明.zip 基于 fastapi 的爬虫可视化调度系统源码+项目说明.zip 基于 fastapi 的爬虫可视化调度系统源码+项目说明.zip 基于 fastapi 的爬虫可视化调度系统源码+项目说明.zip 基于 fastapi 的爬虫可视化调度系统源码+项目说明.zip 基于 fastapi 的爬虫可视化调度系统源码+项目说明.zip 基于 fastapi 的爬虫可视化调度系统源码+项目说明.zip 【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能正常的情况下才上传的,请放心下载使用。 2、适用人群:主要针对计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、数学、电子信息等)的同学或企业员工下载使用,具有较高的学习借鉴价值。 3、不仅适合小白学习实战练习,也可作为大作业、课程设计、毕设项目、初期项目立项演示等,欢迎下载,互相学习,共同进步!
Fastapi中怎么一次性运行多个Scrapy爬虫
运行Scrapy爬虫很简单,直接"Scrapy crawl 爬虫名称"即可。但是我们如果想在Fastapi中通过接口的方式一次性运行多个爬虫。那该怎么实现?
unity中VideoPlayer播放视频,使用Shader除去黑底且无黑边
1. 创建一个Shader 和 一个 材质球;Shader中复制如下代码:(此Shader代码为“ChromaKeyKit”插件中的ChromaKey_Alpa_Genera代码,但因只需要除去视频黑底而挂一个插件有点不合适) // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "ChromaKeyKit/ChromaKey/ChromaKey_Alpha_General"
Scrapy vs FastAPI+Requests:高性能爬虫架构对比,90%的人都选错了
深入解析Python爬虫框架对比,Scrapy与FastAPI+Requests在高并发场景下的性能差异。涵盖架构设计、适用场景及开发效率,帮你避开选型误区。90%开发者忽略的关键优势,值得收藏并点击了解完整方案。
微信支付V2,jsapi支付拉起收银台报错:调用支付JSAPI缺少参数:total_fee
拉起收银台报错
MiniOSD DIY记
最近迷上了航模,研究了很多东西,感觉路走的长了还是适当要停下脚步休息下总结下。 这次DIY的是一块OSD设备,主要用于航模图传的叠加显示,原理也很简单就是atmel atmega328p+MAX7456芯片,网上卖的成品基本上都是一个原理图。 原理图 我按照我自己的需要做了适当的更改,去掉了DC-DC电路,直接用5V输入,因为摄像头都是5V的,所以DC-DC不是很有必要,体积上更加小了点, 打...
FastAPI筑基_Day4_aiohttp超高速并发爬虫实战
导读:本文把前三天的异步语法、彩色日志、命令行参数三个知识点整合起来,讲解如何用 aiohttp 编写高并发异步爬虫。最终产出一套可直接复用的爬虫模板:并发批量请求、异常容错、超时控制、耗时统计一应俱全。目的是让你真正理解异步为什么能提速,也为后续学习 FastAPI 的高并发能力打下基础。Day1:掌握 async/await 异步核心原理Day2:封装彩色日志 + 装饰器,规范项目输出Day3:学会命令行动态传参,彻底告别硬编码Day4 我们将全部整合,写出一套工业级、高可用、高并发异步爬虫!
Xilinx UltraScale+ FPGA实战:手把手教你实现USB3.0设备开发(附原理图+代码)
本文详细介绍了如何使用Xilinx UltraScale+ FPGA开发USB3.0设备,涵盖硬件设计、Vivado工程配置、Petalinux系统定制及功能测试全流程。通过实战案例和优化技巧,帮助开发者快速掌握高速数据传输实现方法,提升嵌入式系统开发效率。
FastAPI筑基_Day1_异步编程入门
在 AI 时代,Python 后端几乎成了模型部署的首选——无论是用 FastAPI 封装一个 ChatGPT 对话接口,还是搭建 Stable Diffusion 的出图服务,都离不开 FastAPI。而 FastAPI 之所以能做到超高并发性能,底层依托的是 Python 原生asyncio异步框架。异步编程就是让程序在等待 IO(网络请求、文件读写)时不干等着,而是去干别的事,效率翻倍。认清同步短板—— 为什么同步代码慢?掌握异步语法——怎么写?上手并发请求—— 用aiohttp同时抓多个网页。
看完这篇爽文我终于学会了示波器(一)
示波器基础篇的介绍,希望对你有用,下次分享一下如何测试。
手把手教你用DCT/DCG实现Multi-bit FF物理优化(含SPG流程避坑指南)
本文详细解析了Multi-bit FF(MBFF)在芯片物理实现中的优化方法,重点介绍了DCT/DCG与SPG流程的实战应用。通过物理感知综合、寄存器组识别和增量优化三阶段流程,实现PPA(Power-Performance-Area)的协同提升。文章还提供了Innovus与ICC工具的协同优化策略及典型问题排查指南,帮助工程师高效完成MBFF物理优化。
Python学习路径规划:从环境搭建到爬虫与数据分析实战
Python作为一门简洁高效的编程语言,其核心价值在于将复杂的编程逻辑抽象为易于理解的语法结构,并通过丰富的第三方库生态解决实际问题。理解Python的变量、数据结构、函数和面向对象等基础概念,是掌握其编程原理的关键。这些技术能力在数据采集、处理与分析等场景中尤为重要,能够帮助开发者构建自动化脚本和数据处理流程。本文聚焦于Python学习路径的合理规划,通过环境搭建、核心语法精讲、爬虫实战与数据分析案例,系统性地构建从入门到实践的知识体系,并融入虚拟环境管理和pandas数据处理等热词,为学习者提供一条清晰
基于四旋翼模型的火箭型无人机视线角保持控制仿真设计
本文针对火箭型无人机的视线角保持控制问题展开研究。基于四旋翼动力学模型,通过改造设计了一种摄像头朝上安装的特殊无人机系统,用于追踪空中目标。文章详细推导了坐标系定义、运动学和动力学方程,重点分析了摄像头安装与视线几何关系,建立了目标运动模型和视线向量计算方法。通过解算期望姿态角,实现了使机体Z轴始终对准目标的控制目标。仿真结果表明,该系统能有效完成视线角保持任务,为空对空监视等应用场景提供了可行方案。~~~~~
如何快速上手BOtB:从安装到执行容器漏洞检测的简明教程
BOtB(Break Out The Box)是一款专为渗透测试人员和工程师设计的容器分析与漏洞利用工具,能够帮助用户快速识别容器环境中的安全隐患。本教程将带你从安装到执行容器漏洞检测,轻松掌握这款强大工具的使用方法。 ## 准备工作:安装前的环境要求 在开始安装BOtB之前,请确保你的系统满足以下条件: - Go 1.11或更高版本(因为项目使用Go模块进行依赖管理) - Git工具(用于克
GPS系统跟踪捕获算法的Verilog实现在FPGA
本文将介绍GPS系统中的跟踪捕获算法,并提供该算法的Verilog实现在FPGA上运行的源代码。常用的方法是将接收到的信号与一个本地振荡器产生的参考信号进行混频,然后使用带通滤波器提取出希望得到的频率分量。码跟踪的目的是通过检测接收到的信号中的码片序列来实现对导航数据的解调。以上是一个简化的GPS系统跟踪捕获算法的Verilog实现,其中包含了时间检测、频率跟踪和码跟踪三个模块。GPS信号由载波频率和导航数据组成。跟踪捕获算法的目标是通过对接收到的信号进行处理,从而获取到准确的载波频率和导航数据。
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
python进阶训练营百度网盘,python入门后如何进阶
大家好,小编为大家解答python进阶书籍的推荐 知乎的问题。很多人还不知道python进阶训练营极客大学,现在让我们一起来看看吧!
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
【Agent学习】Day05-06
本文介绍了基于FastAPI+LangChain构建AI服务的完整流程。首先通过LangServe搭建REST API接口,实现自我介绍生成功能;然后详细讲解了RAG问答框架的实现,包括网页内容抓取、文本分块处理、向量化存储及检索;最后实现了流式输出功能,优化了问答体验。
Outlook Express 6 (OE6) for Win7/Win8/Win10
英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。
SAP B1中文培訓教材_SDK
公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说
Python全栈开发100天速成计划:从基础到实战
Python作为当前最流行的编程语言之一,其全栈开发能力在Web应用、数据分析和自动化脚本等领域具有广泛的应用价值。通过系统化的学习路径,开发者可以掌握从基础语法到高级框架的核心技术栈。本训练营采用每日编码的强化训练模式,结合Jupyter Notebook等工具,重点培养解决实际工程问题的能力。课程涵盖Flask、FastAPI等Web框架实战,以及Pandas数据处理、Scrapy爬虫开发等热门技术方向,特别适合希望快速提升Python工程实践能力的开发者。训练营独创的'算法扑克'等学习方法,能有效提升
电竞舆情监测系统:基于NLP与爬虫的虚假信息识别与自动辟谣方案
在信息爆炸的时代,网络舆情监测与虚假信息识别已成为数据科学和自然语言处理(NLP)的重要应用领域。其核心原理是通过网络爬虫技术实时采集多平台公开数据,并利用NLP模型对文本进行语义分析、情感判断和可信度评估,从而在海量信息中自动识别潜在风险。这项技术的价值在于能够将人工从繁琐的信息筛查中解放出来,实现风险预警的前置与响应效率的质变。在电竞、体育、娱乐等社区互动频繁的领域,针对如“休息室冲突”、“队员更换”等特定场景的虚假传闻,系统能提供从监测、分析到生成初步应对方案的全链路自动化支持,有效辅助社区管理与公关
Python进阶:从框架学习到项目实战的60天路径
Python作为一门广泛应用于数据分析、Web开发和自动化测试的编程语言,其简洁的语法和强大的生态系统使其成为开发者的首选。掌握Python不仅需要理解基础语法,还需深入其核心应用和框架原理。在生产环境中,合理的配置和架构设计是保证项目成功的关键。例如,使用虚拟环境避免依赖冲突,采用三层架构提升代码可维护性。Python在验证码识别、会话管理和性能优化等场景中展现出强大的技术价值。通过项目实战,如构建RESTful微服务或分布式爬虫系统,开发者可以全面提升工程化思维和调试能力。
Python零基础5天速成:爬虫与数据分析实战路径全解析
Python作为当下最热门的编程语言之一,其核心价值在于强大的生态库和简洁的语法,能够高效解决数据处理与自动化问题。从技术原理上看,Python通过丰富的第三方库(如Requests、Pandas)实现了网络数据采集和结构化分析,为数据驱动决策提供了技术基础。在工程实践中,掌握Python爬虫与数据分析能力,可以快速实现从数据获取、清洗到可视化呈现的全流程自动化,显著提升工作效率。特别是在大数据和人工智能时代,这两项技能已成为数据分析师、开发工程师乃至业务人员的标配。本文以一套系统的Python零基础教程为
2122



被折叠的 条评论
为什么被折叠?



