『requests-html 源碼學(xué)習(xí): 1』

大家好,我是謝偉,是一名程序員,熟悉 Pyhton 和 Go。學(xué)會的第一個技能是『網(wǎng)絡(luò)爬蟲』。

最近 Python 領(lǐng)域大神 kennethreitz 開源了一個關(guān)于網(wǎng)絡(luò)內(nèi)容解析的庫,代碼量很少,一方面我熟悉Python 領(lǐng)域的爬蟲,另一方面也想看看大神是如何編寫代碼。

首先當(dāng)然是試用下作者的庫的使用。依然維持了作者的風(fēng)格,API 極度簡潔。

文檔:地址

示例

最近在嘗試解析簡書官網(wǎng)的API, 編程語言使用 golang。那示例也使用簡書為例吧。

給定作者URL,嘗試獲?。?/p>

示意圖.png
  • 作者主頁地址: get_url
  • 作者名稱 : get_author
  • 作者關(guān)注數(shù): get_following_number
  • 作者粉絲數(shù): get_follower_number
  • 作者文章: get_passage_number
  • 作者寫的字?jǐn)?shù): get_writer_number
  • 作者收到的喜歡數(shù): 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("http://www.itdecent.cn/u/ad01cece21e2")
    # jianshu = JianShu("http://www.itdecent.cn/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)

結(jié)果:

謝小路 
上海大學(xué)2017級研究生畢業(yè).微信公眾號:Siwei_Jingjin 
http://www.itdecent.cn/u/58f0817209aa 
{'http://weibo.com/u/1948244870'} 
7關(guān)注
509粉絲 
457收獲喜歡 
79698字?jǐn)?shù)

requests-html 項(xiàng)目地址


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容