夜未央_ 2022-03-25 02:06 采纳率: 50%
浏览 42
已结题

Python异步(asyncio)请求--同步的问题错误

问题遇到的现象和发生背景

使用asyncio、aiohttp提取一些链接时,过程中解析那里出现问题

问题相关代码,请勿粘贴截图
from pyquery import PyQuery
import os
import asyncio
import aiohttp
import warnings


warnings.filterwarnings("ignore", category=DeprecationWarning)
# 并发量设置
semaphore = asyncio.Semaphore(5)

# 获取一个请求里的所有img页面详情链接
async def url_pages(page):
    # async with semaphore:
    print("开始下载第{}页...".format(page))
    _url = 'https://wallhaven.cc/toplist?page={}'.format(page)
    async with session.get(_url) as response:
        async with lock:
            result = await response.text()
            for _item in PyQuery(result)('.thumb-listing-page li').items():
                img_url.append(_item('.preview').attr('href'))
            # for i in range(24):
            #     img_url.append(i)

            print("{}.....".format(page))
            print(len(img_url))

# 主方法
async def scrape_main():
    global session
    session = aiohttp.ClientSession()
    scrape_index_tasks = [asyncio.ensure_future(url_pages(page)) for page in range(1, pages+1)]
    await asyncio.wait(scrape_index_tasks)
    await session.close()


if __name__ == '__main__':
    pages = 30
    img_url = []
    session = None
    lock = asyncio.Lock()
    asyncio.get_event_loop().run_until_complete(scrape_main())
运行结果及报错内容

就是为什么中间那部分解析的内容没有添加都列表,而用普通的for循环却可以。
表示很懵!
正常应该是720的,结果就只添加了528.

img

img

我的解答思路和尝试过的方法

并发量控制尝试过,Lock也尝试过,还是解决不了

我想要达到的结果

30页的内容,没页解析出24条数据,一共720条数据才对,现在的问题就是,中间有些内容解析的数据没有添加成功,请解惑o(╥﹏╥)o

  • 写回答

2条回答 默认 最新

  • 於黾 2022-03-25 07:46
    关注

    你定义了个lock变量,然后在哪用了,哪里也没用啊
    你需要这样
    with lock:
    #do something

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月25日
  • 已采纳回答 3月25日
  • 修改了问题 3月25日
  • 创建了问题 3月25日

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?