『requests-html 源码学习: 1』

作者: 谢小路 | 来源:发表于2018-03-06 00:13 被阅读182次

    大家好,我是谢伟,是一名程序员,熟悉 Pyhton 和 Go。学会的第一个技能是『网络爬虫』。

    最近 Python 领域大神 kennethreitz 开源了一个关于网络内容解析的库,代码量很少,一方面我熟悉Python 领域的爬虫,另一方面也想看看大神是如何编写代码。

    首先当然是试用下作者的库的使用。依然维持了作者的风格,API 极度简洁。

    文档:地址

    示例

    最近在尝试解析简书官网的API, 编程语言使用 golang。那示例也使用简书为例吧。

    给定作者URL,尝试获取:


    示意图.png
    • 作者主页地址: get_url
    • 作者名称 : get_author
    • 作者关注数: get_following_number
    • 作者粉丝数: get_follower_number
    • 作者文章: get_passage_number
    • 作者写的字数: get_writer_number
    • 作者收到的喜欢数: get_liked_number
    • 作者的简介: get_description
    • 作者的微博地址: get_weibo
    from requests_html import HTMLSession
    
    
    class JianShu(object):
    
        def __init__(self, root_url):
            self.url = root_url
            self.session = HTMLSession()
    
        @property
        def response(self):
            return self.session.get(self.url)
    
        @property
        def get_author(self):
            return self.response.html.find(".main-top .title", first=True).text
    
        @property
        def get_url(self):
            return self.url
    
        @property
        def get_description(self):
            return self.response.html.find(".js-intro", first=True).text.replace(" ", "").replace("\n", "").replace("\t", "")
    
        @property
        def get_weibo(self):
            flag = self.response.html.find("div.description > a[target=_blank]", first=True)
            if not flag:
                return "no found weibo info"
            else:
                return flag.absolute_links
    
        def get_list_passage(self):
            pass
    
        @property
        def get_follower_number(self):
            number = self.response.html.find("div.main-top > div.info > ul > li > div")[0].text
            return number.replace(" ", "").replace("\n", "").replace("\t", "")
    
        @property
        def get_following_number(self):
            number = self.response.html.find("div.main-top > div.info > ul > li > div")[1].text
            return number.replace(" ", "").replace("\n", "").replace("\t", "")
    
        @property
        def get_passage_number(self):
            number = self.response.html.find("div.main-top > div.info > ul > li > div")[2].text
            return number.replace(" ", "").replace("\n", "").replace("\t", "")
    
        @property
        def get_writer_number(self):
            number = self.response.html.find("div.main-top > div.info > ul > li > div")[3].text
            return number.replace(" ", "").replace("\n", "").replace("\t", "")
    
        @property
        def get_liked_number(self):
            number = self.response.html.find("div.main-top > div.info > ul > li > div")[4].text
            return number.replace(" ", "").replace("\n", "").replace("\t", "")
    
    
    if __name__ == "__main__":
        jianshu = JianShu("https://www.jianshu.com/u/ad01cece21e2")
        # jianshu = JianShu("https://www.jianshu.com/u/58f0817209aa")
        print(jianshu.get_author, jianshu.get_description, jianshu.get_url, jianshu.get_weibo,
              jianshu.get_follower_number,
              jianshu.get_following_number,
              jianshu.get_liked_number,
              jianshu.get_writer_number)
    

    结果:

    谢小路 
    上海大学2017级研究生毕业.微信公众号:Siwei_Jingjin 
    https://www.jianshu.com/u/58f0817209aa 
    {'http://weibo.com/u/1948244870'} 
    7关注
    509粉丝 
    457收获喜欢 
    79698字数
    

    requests-html 项目地址


    相关文章

      本文标题:『requests-html 源码学习: 1』

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