修改requests_html.AsyncHTMLSessions使得支持url参数

一、修改源代码

#重写AsyncHTMLSession中的run()方法

    def run(self, *coros,urls=None):
        """ Pass in all the coroutines you want to run, it will wrap each one
            in a task, run it and wait for the result. Return a list with all
            results, this is returned in the same order coros are passed in. """
        if urls:
            if isinstance(urls,list):
                tasks = [
                    asyncio.ensure_future(coro(url)) for coro in coros  for url in urls
                ]
                done, _ = self.loop.run_until_complete(asyncio.wait(tasks))
                return [t.result() for t in done]
            else:
                tasks = [
                    asyncio.ensure_future(coro(urls)) for coro in coros
                ]
                done, _ = self.loop.run_until_complete(asyncio.wait(tasks))
                return [t.result() for t in done]
        else:
            tasks = [
                asyncio.ensure_future(coro()) for coro in coros
            ]
            done, _ = self.loop.run_until_complete(asyncio.wait(tasks))
            return [t.result() for t in done]

二、测试

from requests_html import AsyncHTMLSession

asession = AsyncHTMLSession()

async def get_link(link):
    res = await asession.get(link)
    return res.html.absolute_links

url="https://www.cnblogs.com/"
results = asession.run(get_link,urls=url)
print(results)

url=["https://www.cnblogs.com/","https://www.jd.com"]
results = asession.run(get_link,urls=url)
print(results)

三、或者新建一个NewAsyncHTMLSession继承

from requests_html import AsyncHTMLSession
import asyncio

class NewAsyncHTMLSession(AsyncHTMLSession):
    def run(self, *coros,urls=None):
        """ Pass in all the coroutines you want to run, it will wrap each one
            in a task, run it and wait for the result. Return a list with all
            results, this is returned in the same order coros are passed in. """
        if urls:
            if isinstance(urls,list):
                tasks = [
                    asyncio.ensure_future(coro(url)) for coro in coros  for url in urls
                ]
                done, _ = self.loop.run_until_complete(asyncio.wait(tasks))
                return [t.result() for t in done]
            else:
                tasks = [
                    asyncio.ensure_future(coro(urls)) for coro in coros
                ]
                done, _ = self.loop.run_until_complete(asyncio.wait(tasks))
                return [t.result() for t in done]
        else:
            tasks = [
                asyncio.ensure_future(coro()) for coro in coros
            ]
            done, _ = self.loop.run_until_complete(asyncio.wait(tasks))
            return [t.result() for t in done]

asession = NewAsyncHTMLSession()

async def get_link(link):
    res = await asession.get(link)
    return res.html.absolute_links

url="https://www.cnblogs.com/"
results = asession.run(get_link,urls=url)
print(results)

url=["https://www.cnblogs.com/","https://www.jd.com"]
results = asession.run(get_link,urls=url)
print(results)

Original: https://www.cnblogs.com/angelyan/p/13913926.html
Author: Maple_feng
Title: 修改requests_html.AsyncHTMLSessions使得支持url参数

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/544239/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • java笔记

    1、类和方法(函数)的命名规则 总结: 类(首字母大写!!!),函数、变量 首字母小写其余首字母大写 2、注释的方法 //这是&…

    Java 2023年5月29日
    075
  • Javaweb学习-HTML

    重新开始HTML,之前学的都忘了 posted @2022-03-24 21:27 HelloHui 阅读(7 ) 评论() 编辑 Original: https://www.cn…

    Java 2023年6月9日
    080
  • 准备好写播客的准备:Markdown基础语法

    Markdown学习 标题 一级标题 二级标题 三级标题 字体 Hello,World! Hello,World! Hello,World! Hello,World! 引用 引用内…

    Java 2023年6月6日
    078
  • 动态线程池(DynamicTp)之动态调整Tomcat、Jetty、Undertow线程池参数篇

    大家好,这篇文章我们来介绍下动态线程池框架(DynamicTp)的adapter模块,上篇文章也大概介绍过了,该模块主要是用来适配一些第三方组件的线程池管理,让第三方组件内置的线程…

    Java 2023年6月14日
    081
  • 非易失性规划的原理与实现方法

    常言道,计划不如变化快。计划的制定本身就建基于对未来一定时间范围内的环境条件假设,当计划制定后到执行完成的时间段内,若环境条件发生变化,那么计划也需要进行适当的调整才能满足实际要求…

    Java 2023年6月16日
    076
  • 研究一下JAVA robot类

    什么是机器人工具类 此工具类与qq机器人并 不相同,可以理解为 键盘与鼠标事件, 代替人对电脑执行操作 具体使用 /** * Constructs a Robot object i…

    Java 2023年6月7日
    072
  • 使springAOP生效不一定要加@EnableAspectJAutoProxy注解

    在上篇文章《springAOP和AspectJ有关系吗?如何使用springAOP面向切面编程》中遗留了一个问题,那就是在springboot中使用springAOP需要加@Ena…

    Java 2023年6月9日
    071
  • SpringBoot+SpringSecurity+SpringSession实现一个前后端分离的权限管理系统

    https://blog.csdn.net/qq_27948811/article/details/89840329 Original: https://www.cnblogs.c…

    Java 2023年5月30日
    069
  • MyBatis实现动态排序方法

    问题: MyBatis想实现动态排序,即自己传排序字段以及排序方式,但是按正常传参会导致查询失败。 因为上面的sql会被处理成如下,即参数会被加上引号当字符串处理。 解决方法: 使…

    Java 2023年5月30日
    062
  • Gitlab Runner的安装与配置

    Runner Runner就像一个个的工人,而Gitlab-CI就是这些工人的一个管理中心,所有工人都要在Gitlab-CI里面登记注册,并且表明自己是为哪个工程服务的。当相应的工…

    Java 2023年6月8日
    084
  • Java 7 实现代码的即改即用

    import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.BufferedReader;impor…

    Java 2023年5月29日
    0139
  • java selenium (六) XPath 定位

    xpath 的定位方法, 非常强大。 使用这种方法几乎可以定位到页面上的任意元素。 什么是xpath xpath 是XML Path的简称, 由于HTML文档本身就是一个标准的XM…

    Java 2023年5月29日
    071
  • 根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第6版)

    第6版重大更新震撼发布,功能更加强大,速度过来围观,这次版本更新如下: 1、新增测试数据库连接。2、标准模板新增C#标准模板。3、字段转换设置新增需要在某类型上添加的注解配置。4、…

    Java 2023年6月9日
    062
  • 实用向—总结一些唯一ID生成方式

    Redis Incr 命令会将 key 中储存的数字值增一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。 这里以jedis为例提供两种…

    Java 2023年6月9日
    076
  • JAVA PPT

    SDSDFSDF posted @2017-11-29 14:23 麦田HH 阅读(403 ) 评论() 编辑 Original: https://www.cnblogs.com/…

    Java 2023年5月29日
    072
  • 句子

    脑中的空白为谁而留 持续了太久今天依旧为何始终绕不过时间轴 凋零的勇气散落在哪里 生涯一半的荒芜难道还不够 已经没有力气再驱动一丝的笑意 熟悉的对白无言的结局 重启 更多原创技术内…

    Java 2023年6月5日
    063
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球