美文网首页
04 如何检测某大号的微博数据

04 如何检测某大号的微博数据

作者: 夏威夷的芒果 | 来源:发表于2018-07-15 18:08 被阅读80次

    两个问题:

    1. 如何获得数据?
    • 浏览器打开网页
    • 等待加载完网页
    • 找到数据位置
    1. 如何实时检测?(While(True))循环体解决
    多个em可以选择第几个子

    其实python模拟键盘鼠标点击也是有办法的,它可以是应用无关的,比如https://www.cnblogs.com/fanghao/p/8453207.html,也可以是应用有关的,比如selenium

    注意在微博上,网页使用的是js触发html,所以禁用js以后就会出现一个空的html网页,这是我们不想见到的。那么怎么解决?两个办法,一是访问手机版、2是使用chromedriver进行模拟登陆,把chromedriver放在工程根目录下,就可以模拟chrome了。
    用Python打开浏览器,

    from selenium import webdriver
    from time import sleep
    
    url= 'https://weibo.com/1784190495/GeX0iBWOA?type=comment'
    
    def start_chrome():
        driver = webdriver.Chrome(executable_path='./chromedriver')
        driver.start_client()
        return driver
    
    def find_info():
        #css.selector
        sel = 'span > span.line.S_line1 > span > em:nth-child(2)'
        elems = driver.find_elements_by_css_selector(sel)
        return [int(el.text) for i in elems[1,3]]
    
    while True:
        driver = start_chrome()
        driver.get(url)
        sleep(10)  #等待页面加载完毕
        info = find_info()
        #[123,456,789]
        rep, comm,like = info
    
        if rep > 70000:
            print('你关注的微博的转发量已经超过了 ' + str(rep))
            print(f'你关注的微博的转发量已经超过{rep}') 
            #这是3.6的后续版本的一种特性,无需转换变量,直接代入进字符串||file.zhibo.tv/images/rich/rich1.png
            break
        else:
            print('Not happening')
            sleep(1200)
    print('Done')
    

    练习:微博话题数据提醒

    当微博上话题 #奥斯卡# 的讨论数破370万时,print 出来

    奥斯卡话题页面:
    https://s.weibo.com/weibo/%2523%25E5%25A5%25A5%25E6%2596%25AF%25E5%258D%25A1%2523&Refer=STopic_box

    提示

    • 问题拆解提示
    • 该问题可以拆解为以下若干子问题:
    • 1.如何自动访问页面?
    • 2.如何从页面中获取需要的信息?
    • 3.如何持续监测?
    • 问题解决提示
    • 1.利用 selenium库中的 webdriver,自动化地完成打开浏览器、访问指定网址等一系列操作。
    • 2.先利用 css 选择器定位页面中的元素位置,然后利用 webdriver 中的 find_elements_by_css_selector 函数,来获取相应的元素内容。
    • 3.利用 while True 来进行持续监测。

    代码

    # Windows版的代码请在这下载:https://video.mugglecode.com/net4_practice.py
    # 以下为Mac/Linux/可在麻瓜编程在线运行的代码:
    
    # coding:utf-8
    import time
    from selenium import webdriver
    # 利用webdriver开启chrome浏览器
    def start_chrome():
        # windows系统下,executable_path='./chromedriver.exe'
        driver = webdriver.Chrome(executable_path='./chromedriver')
        driver.start_client()
        return driver
    # 访问页面,并获取需要的信息
    def get_info(driver, url):
        # 访问页面
        driver.get(url)
        # 等待响应6秒
        time.sleep(6)
        # 利用chrome中的css选择器,获取到如下定位字符串
        sel = "#pl_common_searchTop > div.search_topic > div.m_topic > div.small_pic > div > p > span:nth-child(2)"
        elems = driver.find_elements_by_css_selector(sel)
        # 通过页面检查,获取的结果只有一个,所以直接用elems[0].text
        # 此时获取的内容是“讨论363万”,利用replace函数,将“讨论”两个字删掉
        result = elems[0].text.replace("讨论","")
        return result
    
    url = "https://s.weibo.com/weibo/%2523%25E5%25A5%25A5%25E6%2596%25AF%25E5%258D%25A1%2523&Refer=STopic_box"
    driver = start_chrome()
    target = "370万"
    # 每隔1200秒,监测一次
    while True:
        result = get_info(driver, url)
        if result >= target:
            print(f'微博话题“奥斯卡”的讨论量已经达到{result}')
            break
        else:
            print(f'微博话题“奥斯卡”的讨论量还未突破{target}')
        time.sleep(1200)
    print("Done!")
    

    相关文章

      网友评论

          本文标题:04 如何检测某大号的微博数据

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