V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
prasanta
V2EX  ›  Python

新型 Python 爬虫框架 gain: 基于 asyncio, uvloop 和 aiohttp.

  •  
  •   prasanta · 2017-06-02 16:51:27 +08:00 · 7667 次点击
    这是一个创建于 2730 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Gain

    github 地址: https://github.com/gaojiuli/gain/

    gain 是为了让每大家能够轻松编写 python 爬虫, 它使用了 asyncio, uvloop 和 aiohttp.

    准备

    • Python3.5+

    安装

    pip install gain

    用法

    Write spider.py:

    from gain import Css, Item, Parser, Spider
    
    
    class Post(Item):
        title = Css('.entry-title')
        content = Css('.entry-content')
    
        async def save(self):
            with open('scrapinghub.txt', 'a+') as f:
                f.writelines(self.results['title'] + '\n')
    
    
    class MySpider(Spider):
        start_url = 'https://blog.scrapinghub.com/'
        parsers = [Parser('https://blog.scrapinghub.com/page/\d+/'),
                   Parser('https://blog.scrapinghub.com/\d{4}/\d{2}/\d{2}/[a-z0-9\-]+/', Post)]
    
    
    MySpider.run()
    

    run python spider.py

    案例

    案例在 /example/ 目录下.

    github 地址: https://github.com/gaojiuli/gain/

    20 条回复    2017-06-04 22:42:58 +08:00
    awolfly9
        1
    awolfly9  
       2017-06-02 17:35:46 +08:00 via Android
    mark
    MIROKY
        2
    MIROKY  
       2017-06-02 17:49:27 +08:00 via Android
    wow 马克
    charove
        3
    charove  
       2017-06-02 17:50:27 +08:00
    感觉好叼。。。
    qs
        4
    qs  
       2017-06-02 20:13:08 +08:00
    win 平台不支持 uvloop, 建议做个适配
    prasanta
        5
    prasanta  
    OP
       2017-06-02 23:20:37 +08:00 via Android
    @qs 多谢测试
    maze1024
        6
    maze1024  
       2017-06-03 00:30:49 +08:00
    aiohttp 的 http 解析配合 uvloop 不是很高效,建议看看 uvloop 的实现 https://github.com/MagicStack/httptools
    isaced
        7
    isaced  
       2017-06-03 00:52:48 +08:00
    建议把输出结果文件的操作封装一下用起来更舒服
    PythonAnswer
        8
    PythonAnswer  
       2017-06-03 01:07:49 +08:00 via Android
    uvloop win 跑不了啊
    prasanta
        9
    prasanta  
    OP
       2017-06-03 07:51:17 +08:00 via Android
    @maze1024 感谢你的意见,我去测试
    prasanta
        10
    prasanta  
    OP
       2017-06-03 07:52:16 +08:00 via Android
    @isaced 你有什么好的想法么,我现在是让使用者自定义 save()函数。不知道你的封装是指?
    prasanta
        11
    prasanta  
    OP
       2017-06-03 07:53:12 +08:00 via Android
    @PythonAnswer 看了楼上的意见,我准备暂时移除 uvloop
    chuanqirenwu
        12
    chuanqirenwu  
       2017-06-03 10:14:59 +08:00
    不错,感谢作者的分享,已转发到 Pythonzhcn 社区,不知道是否允许?
    prasanta
        13
    prasanta  
    OP
       2017-06-03 10:22:13 +08:00 via Android
    @chuanqirenwu 可以
    pythonee
        14
    pythonee  
       2017-06-03 20:17:46 +08:00
    mark
    hellogbk
        15
    hellogbk  
       2017-06-04 00:51:49 +08:00
    我这些天在用 pyquery 的时候是到一个问题,如果网页是以
    <?xml version="1.0" encoding="UTF-8"?>
    开头的则 pyquery 会出错。 不知道楼主有没有遇到。
    prasanta
        16
    prasanta  
    OP
       2017-06-04 09:13:51 +08:00 via Android
    @hellogbk pyquery 没有支持 xml 文件吧?
    hbmask
        17
    hbmask  
       2017-06-04 10:50:47 +08:00
    mark 一下
    hellogbk
        18
    hellogbk  
       2017-06-04 13:27:37 +08:00
    @prasanta #16
    我碰到的是 HTML 文件,但是文件开头写着的却是<?xml version="1.0" encoding="UTF-8"?>
    然后 pyquery 就出错了。
    prasanta
        19
    prasanta  
    OP
       2017-06-04 22:17:52 +08:00
    @hellogbk pyquery 已经够好用了,你这种情况建议使用 lxml
    pb941129
        20
    pb941129  
       2017-06-04 22:42:58 +08:00
    mark 一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2714 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:30 · PVG 20:30 · LAX 04:30 · JFK 07:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.