资讯专栏INFORMATION COLUMN

基于 asyncio 的Python异步爬虫框架

Vultr / 2226人阅读

摘要:轻量异步爬虫框架,基于,目的是让编写单页面爬虫更方便更迅速,利用异步特性让爬虫更快减少在上的耗时介绍对于单页面,只要实现框架定义的就可以实现对目标数据的抓取对于页面目标较多,需要进行深度抓取时,就派上用场了支持的加载类也可以很好的

aspider

A web scraping micro-framework based on asyncio.

轻量异步爬虫框架aspider,基于asyncio,目的是让编写单页面爬虫更方便更迅速,利用异步特性让爬虫更快(减少在IO上的耗时)

介绍
pip install aspider
Item

对于单页面,只要实现框架定义的 Item 就可以实现对目标数据的抓取:

import asyncio

from aspider import Request

request = Request("https://news.ycombinator.com/")
response = asyncio.get_event_loop().run_until_complete(request.fetch())

# Output
# [2018-07-25 11:23:42,620]-Request-INFO  
# 
Spider

对于页面目标较多,需要进行深度抓取时,Spider就派上用场了

import aiofiles

from aspider import AttrField, TextField, Item, Spider


class HackerNewsItem(Item):
    target_item = TextField(css_select="tr.athing")
    title = TextField(css_select="a.storylink")
    url = AttrField(css_select="a.storylink", attr="href")

    async def clean_title(self, value):
        return value


class HackerNewsSpider(Spider):
    start_urls = ["https://news.ycombinator.com/", "https://news.ycombinator.com/news?p=2"]

    async def parse(self, res):
        items = await HackerNewsItem.get_items(html=res.body)
        for item in items:
            async with aiofiles.open("./hacker_news.txt", "a") as f:
                await f.write(item.title + "
")


if __name__ == "__main__":
    HackerNewsSpider.start()

支持JS的加载

Request类也可以很好的工作并返回内容,这里以这个为例演示下抓取需要加载js才可以抓取的例子:

request = Request("https://www.jianshu.com/", load_js=True)
response = asyncio.get_event_loop().run_until_complete(request.fetch())
print(response.body)

如果喜欢,可以玩玩看,项目Github地址:aspider

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42408.html

相关文章

  • python基础教程:异步IO 之 概念和历史

    摘要:并发的方式有多种,多线程,多进程,异步等。多线程和多进程之间的场景切换和通讯代价很高,不适合密集型的场景关于多线程和多进程的特点已经超出本文讨论的范畴,有兴趣的同学可以自行搜索深入理解。 编程中,我们经常会遇到并发这个概念,目的是让软件能充分利用硬件资源,提高性能。并发的方式有多种,多线程,多进程,异步IO等。多线程和多进程更多应用于CPU密集型的场景,比如科学计算的时间都耗费在CPU...

    BicycleWarrior 评论0 收藏0
  • Python3 基于asyncio新闻爬虫思路

    摘要:开始,加入了新的语法,和这两个关键字,也成了标准库,这对于我们写异步的程序来说就是如虎添翼,让我们轻而易举的实现一个定向抓取新闻的异步爬虫。网址池异步爬虫的所有流程不能单单用一个循环来完成,它是多个循环至少两个相互作用共同完成的。 showImg(https://segmentfault.com/img/bVbsjjR?w=742&h=487); Python写爬虫是非常方便的,爬取的...

    zhangyucha0 评论0 收藏0
  • python基础教程:异步IO 之 API

    摘要:具有以下基本同步原语子进程提供了通过创建和管理子进程的。虽然队列不是线程安全的,但它们被设计为专门用于代码。表示异步操作的最终结果。 Python的asyncio是使用 async/await 语法编写并发代码的标准库。通过上一节的讲解,我们了解了它不断变化的发展历史。到了Python最新稳定版 3.7 这个版本,asyncio又做了比较大的调整,把这个库的API分为了 高层级API和...

    vboy1010 评论0 收藏0
  • 如何实现一个Python爬虫框架

    摘要:这篇文章的题目有点大,但这并不是说我自觉对爬虫这块有多大见解,我只不过是想将自己的一些经验付诸于笔,对于如何写一个爬虫框架,我想一步一步地结合具体代码来讲述如何从零开始编写一个自己的爬虫框架年到如今,我花精力比较多的一个开源项目算是了,这是 showImg(https://segmentfault.com/img/remote/1460000018513379); 这篇文章的题目有点大...

    feng409 评论0 收藏0
  • 关于Python爬虫种类、法律、轮子一二三

    摘要:一般用进程池维护,的设为数量。多线程爬虫多线程版本可以在单进程下进行异步采集,但线程间的切换开销也会随着线程数的增大而增大。异步协程爬虫引入了异步协程语法。 Welcome to the D-age 对于网络上的公开数据,理论上只要由服务端发送到前端都可以由爬虫获取到。但是Data-age时代的到来,数据是新的黄金,毫不夸张的说,数据是未来的一切。基于统计学数学模型的各种人工智能的出现...

    lscho 评论0 收藏0

发表评论

0条评论

Vultr

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<