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

2018-07-15  本文已影响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

提示

代码

# 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!")
上一篇下一篇

猜你喜欢

热点阅读