python异步爬虫的实现过程

简介: python异步爬虫的实现过程

在日常爬虫中我们会涉及到同步与异步问题,一般异步编程可以大幅度的提高系统的吞吐量,提高单位时间内发出的请求数目。之前的文章分享了些同步的知识,就是对aurl发起请求,等待响应。然后再访问burl,等待响应。。。
大量的时间消耗在等待上,如果能近似的同时对多个网址发起请求,等待响应,速度回快很多倍。其实所谓的同时也是有先后顺序的,所以叫异步。
异步爬虫的方式有以下2种
1、多线程,多进程(不建议):
好处:可以为相关阻塞的操作单独开启线程,阻塞操作就可以异步执行。弊端:无法无限制的开启多线程或者多进程。
2、线程池、进程池(适当的使用):好处:可以降低系统对进程或者线程创建和销毁的一个频率,从而很好的降低系统的开销。弊端:池中线程或进程的数量是有上限。
接下来我们通过aiohttp异步爬虫来爬取一个书籍网站的数据, https://spa5.scrape.center/,通过简单的网站分析,反爬机制不是很严,为了爬取顺利这里添加了代理IP,由于这个网站的数据量多一些,所以选择用异步方式来爬取,代码实例如下:
``# 导入相关库
import asyncio
import aiohttp
from aiohttp_socks import ProxyConnector
from bs4 import BeautifulSoup

定义目标网站和代理服务器的参数

url = "https://spa5.scrape.center/"
proxy = "socks5://16yun:16ip@www.16yun.cn:11111"

定义异步函数来发送GET请求,并使用代理服务器来连接目标网站

async def fetch(session, url):
try:
async with session.get(url) as response:

        # 检查响应状态码是否为200,否则抛出异常
        if response.status != 200:
            raise Exception(f"Bad status code: {response.status}")
        # 返回响应内容的文本格式
        return await response.text()
except Exception as e:
    # 打印异常信息,并返回None
    print(e)
    return None

定义异步函数来处理响应结果,并解析HTML内容

async def parse(html):

# 如果响应结果不为空,则进行解析操作
if html is not None:
    # 使用bs4库来创建BeautifulSoup对象,并指定解析器为html.parser
    soup = BeautifulSoup(html, "html.parser")
    # 提取网页中的标题标签,并打印其文本内容
    title = soup.find("title")
    print(title.text)
else:
    # 否则打印None表示无效结果
    print(None)

定义异步函数来统计成功次数,并打印结果

async def count(results):

# 初始化成功次数为0
success = 0
# 遍历所有的结果,如果不为空,则增加成功次数,否则跳过
for result in results:
    if result is not None:
        success += 1
# 打印总共的请求数和成功次数    
print(f"Total requests: {len(results)}")
print(f"Success requests: {success}")

定义异步主函数来创建并运行多个协程任务,并控制并发数量和超时时间等参数

async def main():

# 创建一个aiohttp_socks.ProxyConnector对象,用来设置代理服务器的参数    
connector = ProxyConnector.from_url(proxy)
# 创建一个aiohttp.ClientSession对象,用来发送HTTP请求,并传入connector参数    
async with aiohttp.ClientSession(connector=connector) as session:
    # 创建一个空列表,用来存储所有的协程任务        
    tasks = []
    # 循环10000次,每次创建一个fetch函数的协程任务,并添加到列表中        
    for i in range(10000):
        task = asyncio.create_task(fetch(session, url))
        tasks.append(task)

    # 使用asyncio.gather函数来收集并执行所有的协程任务,并返回一个包含所有结果的列表        
    results = await asyncio.gather(*tasks)

    # 创建一个空列表,用来存储所有的解析任务        
    parse_tasks = []

     for result in results:
         parse_task = asyncio.create_task(parse(result))
         parse_tasks.append(parse_task)

     await asyncio.gather(*parse_tasks)   

     await count(results)

在程序入口处调用异步主函数,并启动事件循环

if name == "main":
asyncio.run(main())
```

相关文章
|
24天前
|
数据采集 存储 XML
Python爬虫:深入探索1688关键词接口获取之道
在数字化经济中,数据尤其在电商领域的价值日益凸显。1688作为中国领先的B2B平台,其关键词接口对商家至关重要。本文介绍如何通过Python爬虫技术,合法合规地获取1688关键词接口,助力商家洞察市场趋势,优化营销策略。
|
9天前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
14天前
|
数据采集 存储 API
利用Python爬虫获取1688关键词接口全攻略
本文介绍如何使用Python爬虫技术合法合规地获取1688关键词接口数据,包括环境准备、注册1688开发者账号、获取Access Token、构建请求URL、发送API请求、解析HTML及数据处理存储等步骤,强调遵守法律法规和合理使用爬虫技术的重要性。
|
21天前
|
数据采集 JSON 开发者
Python爬虫京东商品详情数据接口
京东商品详情数据接口(JD.item_get)提供商品标题、价格、品牌、规格、图片等详细信息,适用于电商数据分析、竞品分析等。开发者需先注册账号、创建应用并申请接口权限,使用时需遵循相关规则,注意数据更新频率和错误处理。示例代码展示了如何通过 Python 调用此接口并处理返回的 JSON 数据。
|
26天前
|
XML 数据采集 数据格式
Python 爬虫必备杀器,xpath 解析 HTML
【11月更文挑战第17天】XPath 是一种用于在 XML 和 HTML 文档中定位节点的语言,通过路径表达式选取节点或节点集。它不仅适用于 XML,也广泛应用于 HTML 解析。基本语法包括标签名、属性、层级关系等的选择,如 `//p` 选择所有段落标签,`//a[@href='example.com']` 选择特定链接。在 Python 中,常用 lxml 库结合 XPath 进行网页数据抓取,支持高效解析与复杂信息提取。高级技巧涵盖轴的使用和函数应用,如 `contains()` 用于模糊匹配。
|
23天前
|
数据采集 JSON 测试技术
Grequests,非常 Nice 的 Python 异步 HTTP 请求神器
在Python开发中,处理HTTP请求至关重要。`grequests`库基于`requests`,支持异步请求,通过`gevent`实现并发,提高性能。本文介绍了`grequests`的安装、基本与高级功能,如GET/POST请求、并发控制等,并探讨其在实际项目中的应用。
32 3
|
28天前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
27天前
|
数据采集 JavaScript 前端开发
Python爬虫能处理动态加载的内容吗?
Python爬虫可处理动态加载内容,主要方法包括:使用Selenium模拟浏览器行为;分析网络请求,直接请求API获取数据;利用Pyppeteer控制无头Chrome。这些方法各有优势,适用于不同场景。
|
1月前
|
数据采集 监控 搜索推荐
python爬虫的基本使用
本文介绍了Python爬虫的基本概念及其广泛应用,包括搜索引擎、数据挖掘、网络监控、舆情分析和信息聚合等领域。通过安装`urllib`和`BeautifulSoup`库,展示了如何编写简单代码实现网页数据的抓取与解析。爬虫技术在大数据时代的重要性日益凸显,为各行业提供了高效的数据获取手段。
36 1
|
1月前
|
数据采集 存储 XML
Python爬虫定义入门知识
Python爬虫是用于自动化抓取互联网数据的程序。其基本概念包括爬虫、请求、响应和解析。常用库有Requests、BeautifulSoup、Scrapy和Selenium。工作流程包括发送请求、接收响应、解析数据和存储数据。注意事项包括遵守Robots协议、避免过度请求、处理异常和确保数据合法性。Python爬虫强大而灵活,但使用时需遵守法律法规。