美文网首页python爬虫日记本爬虫专题程序猿阵线联盟-汇总各类技术干货
Python爬虫:十分钟实现从数据抓取到数据API提供

Python爬虫:十分钟实现从数据抓取到数据API提供

作者: Tony带不带水 | 来源:发表于2018-01-07 23:26 被阅读512次
    偷猫么组队啊
      依旧先从爬虫的基本概念说起,你去做爬虫做数据抓取,第一件事想必是去查看目标网站是否有api。有且可以使用的话,皆大欢喜。
      假如目标网站自身不提供api,但今天你心情不好就想用api来抓数据,那怎么办。有个长者说,没api创造api也要上,所以,那就创造api吧~

    关于Toapi

      很多时候你需要经历抓取数据->存储数据->构建API的基本步骤,然后在去定时更新数据。然而你的目的并不是想去学习搭建稳定可靠自动更新的API服务,你只是想用这个网站的数据而已。Toapi就是为此实现,可以自动化的完成前述任务,达到使用网站实时数据的目的。
      先看效果图 http://gk.chengdu.gov.cn/govInfoPub/list.action?classId=07170201020202&tn=2&p=1 (这个网站是没有api的哟)手机点进去可能没有数据,用pc端浏览器就好。

    api效果图
      如你所见,Toapi会让数据变成一块蛋糕,你只需要将它切下来吃了(虽然中文的显示是unicode)。那么话不多说,看代码。
    from toapi import XPath, Item, Api
    from toapi import Settings
    
    class MySettings(Settings):
        web = {
            # 是否需要使用phantomjs加载
            "with_ajax": False
        }
    
    # 需要构建api的目标网址
    api = Api('http://gk.chengdu.gov.cn/govInfoPub/', settings = MySettings)
    
    class Post(Item):
        # api服务返回json的字段:网页上字段所对应Xpath
        # 这里Xpath是用列表识别自动识别的 可以看我以前的文章
        url = XPath('/html/body/div[2]/div/div[3]//a/@href')
        title = XPath('/html/body/div[2]/div/div[3]//a/span[2]/text()')
    
        class Meta:
            #  source :包含单个数据结构的HTML部分。
            source = XPath('/html')
            # 一个正则表达式,定义API服务的路径。理解成flask中路由就好了
            route = {"/test?page=:page":"list.action?classId=07170201020202&tn=2&p=:page"}
    
    # 注册该服务
    api.register(Post)
    #运行服务器
    api.serve()
    
    # Visit: http://127.0.0.1:5000/
    

      满打满算10行代码吧,你就可以实现数据的api,心动不如行动还不给我打钱,啊呸,不好意思,串场了。下面还是解释下上面的代码。希望对你有帮助。
      对了对了,你写这些代码不用十分钟吧,不要算我标题党。

    • 安装pip install toapi
    • Toapi基于flask,希望这点有助于理解框架的运行。
    • Toapi仅支持python3,这点非常遗憾,但是你一定会python3.
    • Item.Meta.route:支持正则。上面说了等同于flask中路由解析。其中上述代码中使用:page进行翻页。也就是说Key中的:xx于value中的:xx值保持一致,借此实现翻页效果。
    • Item.Meta.source:包含单个数据结构的HTML部分(你可以精确到比如source = XPath('//div[@id='xxx']'))。
    • api.register():注册服务准确的说是注册路由。
    • api.server():运行一个服务器,提供API服务。

      干货部分已经说的差不多了,赶时间的话可以(点赞)出去了,假如你不赶时间,那不妨坐下来我们聊聊天。


    来都来了往下看吧

      之前大病一场,完了又帮我女朋友写了个小程序,所以很长时间没有更新,加之个人精力有限,每天8小时工作,8小时睡眠,剩下8小时需要健身、处理杂七杂八的东西,能自由支配的时间也就四五个小时。
      之前有人私信说(喷),你教程写的不够详细,看了我还是不会啊blabla…嗯…我确实写的不是教程啊…我给一个思路你去完善你的学习步骤知识体系不是更棒(教程那东西怎么写啊啊啊我也不会啊啊啊🤷‍♂️做开发的有几个喜欢写文档你说对不对)
      写这个简书的初衷就是记录与分享,我本身不是什么大牛,也许比你薪资还低,但怎么说呢,如果这些对你没有帮助,你就当在看一个小白的成长;假如对你有帮助,那真的再好不过了。由衷的希望看我文章却觉得不好的人戾气少一点,我接受你的批评,我觉得你说的对我自然会改,而不是去一味否认分享的意义。
      我觉得我不厉害,但我觉得每一个原创分享者都很棒,他们分享自己的经验心得,你觉得没用你不做就是。我依然会继续更新我的简书,或者看情况开通维护我的微信公众号,感谢看了文章跟我讨论的小伙伴。
      希望我的文章对你有帮助,希望你的2018顺心如意(得加薪)。
      对了,别介意最后放个红包码。觉得有帮助扫码就好了,不用赞赏,这里谈技术就好了~


    扫码交网费啊

    相关文章

      网友评论

      • 5a83ad138d2f:感谢分享 另外 扫到了一个大红包哈哈,新年快乐

      本文标题:Python爬虫:十分钟实现从数据抓取到数据API提供

      本文链接:https://www.haomeiwen.com/subject/hozlnxtx.html