前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >『requests-html 源码学习: 1』

『requests-html 源码学习: 1』

作者头像
谢伟
发布2018-06-06 13:33:45
8100
发布2018-06-06 13:33:45
举报
文章被收录于专栏:GopherCoderGopherCoder

大家好,我是谢伟,是一名程序员,熟悉 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
代码语言:javascript
复制
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)

结果:

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

requests-html 项目地址


本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.03.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档