数据分析实战45讲
陈旸
清华大学计算机博士
立即订阅
17221 人已学习
课程目录
已完结 48 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 你为什么需要数据分析能力?
免费
第一模块:数据分析基础篇 (16讲)
01丨数据分析全景图及修炼指南
02丨学习数据挖掘的最佳路径是什么?
03丨Python基础语法:开始你的Python之旅
04丨Python科学计算:用NumPy快速处理数据
05丨Python科学计算:Pandas
06 | 学数据分析要掌握哪些基本概念?
07 | 用户画像:标签化就是数据的抽象能力
08 | 数据采集:如何自动化采集数据?
09丨数据采集:如何用八爪鱼采集微博上的“D&G”评论
10丨Python爬虫:如何自动化下载王祖贤海报?
11 | 数据科学家80%时间都花费在了这些清洗任务上?
免费
12 | 数据集成:这些大号一共20亿粉丝?
13 | 数据变换:考试成绩要求正态分布合理么?
14丨数据可视化:掌握数据领域的万金油技能
15丨一次学会Python数据可视化的10种技能
16丨数据分析基础篇答疑
第二模块:数据分析算法篇 (20讲)
17 丨决策树(上):要不要去打篮球?决策树来告诉你
18丨决策树(中):CART,一棵是回归树,另一棵是分类树
19丨决策树(下):泰坦尼克乘客生存预测
20丨朴素贝叶斯分类(上):如何让机器判断男女?
21丨朴素贝叶斯分类(下):如何对文档进行分类?
22丨SVM(上):如何用一根棍子将蓝红两色球分开?
23丨SVM(下):如何进行乳腺癌检测?
24丨KNN(上):如何根据打斗和接吻次数来划分电影类型?
25丨KNN(下):如何对手写数字进行识别?
26丨K-Means(上):如何给20支亚洲球队做聚类?
27丨K-Means(下):如何使用K-Means对图像进行分割?
28丨EM聚类(上):如何将一份菜等分给两个人?
29丨EM聚类(下):用EM算法对王者荣耀英雄进行划分
30丨关联规则挖掘(上):如何用Apriori发现用户购物规则?
31丨关联规则挖掘(下):导演如何选择演员?
32丨PageRank(上):搞懂Google的PageRank算法
33丨PageRank(下):分析希拉里邮件中的人物关系
34丨AdaBoost(上):如何使用AdaBoost提升分类器性能?
35丨AdaBoost(下):如何使用AdaBoost对房价进行预测?
36丨数据分析算法篇答疑
第三模块:数据分析实战篇 (7讲)
37丨数据采集实战:如何自动化运营微博?
38丨数据可视化实战:如何给毛不易的歌曲做词云展示?
39丨数据挖掘实战(1):信用卡违约率分析
40丨数据挖掘实战(2):信用卡诈骗分析
41丨数据挖掘实战(3):如何对比特币走势进行预测?
42丨当我们谈深度学习的时候,我们都在谈什么?
43丨深度学习(下):如何用Keras搭建深度学习网络做手写数字识别?
第四模块:数据分析工作篇 (2讲)
44丨如何培养你的数据分析思维?
45丨求职简历中没有相关项目经验,怎么办?
加餐 (1讲)
加餐丨在社交网络上刷粉刷量,技术上是如何实现的?
结束语 (1讲)
结束语丨当大家都在讲知识和工具的时候,我更希望你重视思维和实战
数据分析实战45讲
登录|注册

37丨数据采集实战:如何自动化运营微博?

陈旸 2019-03-08
今天我来带你做一个数据采集的实战。之前我讲到可以使用第三方工具,比如八爪鱼做数据采集,也可以自己编写脚本,比如使用 Python。编写 Python 做数据采集和自动化最大的好处就是可控性强,每个步骤都可以调试,而且可以找到问题所在并一一突破。
今天我就带你使用 Python 自动化运营微博。关于今天的学习,希望你能达成以下的 3 个学习目标:
掌握 Selenium 自动化测试工具,以及元素定位的方法;
学会编写微博自动化功能模块:加关注,写评论,发微博;
对微博自动化做自我总结。

Selenium 自动化测试工具

当我们做 Web 自动化测试的时候,可以选用 Selenium 或者 Puppeteer 工具。我在第 10 篇的时候简单介绍过 Selenium 这个工具,你可以再回顾一下。Puppeteer 通过控制无头 Chrome 来完成浏览器的工作。这两个工具之间的区别在于:Selenium 更关注程序执行的流程本身,比如找到指定的元素,设置相应的值,然后点击操作。而 Puppeteer 是浏览者的视角,比如光标移动到某个元素上,键盘输入某个内容等。
今天我们继续使用 Selenium 工具自动化模拟浏览器,重点是学习对元素的定位。在第 10 篇讲到 Selenium WebDriver 的使用时,重点是对 HTML 进行获取和解析,然后通过 HTML 中的 XPath 进行提取,读取相应的内容。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《数据分析实战45讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(16)

  • 牛奶布丁
    老师,微博登录时需要验证码怎么处理呢?
    2019-03-09
    1
    11
  • 一语中的
    数据思维和算法是我的薄弱项,还在一节一节敲之前例子中的代码,但selenium和爬虫是强项,8种定位方法结合WebDriverWait,再加上ActionChains中的方法和js基本天天用。
    虽然学的有点虐(除了本课程最近同时在补《利用python进行数据分析》《精益数据分析》)但是很开心~~~
    2019-03-08
    4
  • 王彬成
    利用Selenium在微博用户页面点击关注,弹出新的小窗口,但是程序显示无法定位到“取消按钮”。通过网上查找,说是需要driver.switchTo().fame("")重新定位页面,但是运行失败,求指导。
    https://www.cnblogs.com/ella-yao/p/7762352.html
    2019-03-08
    3
  • 王彬成
    取消关注时,必须登录账户
    ______________
    #模拟微博自动登录
    from selenium import webdriver
    import time
    browser=webdriver.Chrome('./chromedriver')

    # 登陆微博
    def weibo_login(username,password):
        # 打开微博登录页
        browser.get('https://passport.weibo.cn/signin/login')
        browser.implicitly_wait(5)
        time.sleep(1)
        # 填写登录信息:用户名、密码
        browser.find_element_by_id("loginName").send_keys(username)
        browser.find_element_by_id("loginPassword").send_keys(password)
        time.sleep(1)
        # 点击登录
        browser.find_element_by_id("loginAction").click()
        time.sleep(1)
        
    # 设置用户名、密码
    username='**********'
    password='*********'
    weibo_login(username,password)



    # 取消指定的用户
    def out_follow(uid):
        browser.get('https://m.weibo.cn/u/'+str(uid))
        time.sleep(1)
        #browser.find_element_by_id("follow").click()
        out_follow_button=browser.find_element_by_xpath('//*[@id="app"]/div[1]/div[4]/div[2]/div/div[1]/div/span/h4')
        out_follow_button.click()
        time.sleep(1)
        
        # 点击取消关注
        out_button1=browser.find_element_by_xpath('//*[@id="app"]/div[1]/div[4]/div[2]/div/div[1]/div/div/ul/li[2]/div/h4')
        out_button1.click()
        
        #再次确认取消关注
        out_button2=browser.find_element_by_xpath('//*[@id="app"]/div[2]/div[1]/div[2]/footer/div[2]/a')
        out_button2.click()
        time.sleep(1)
    # 每天学点心理学 UID
    uid='1890826225'
    out_follow(uid)
    2019-03-09
    2
  • 一直提示这个问题 driver.find_elements_by_css_selector("[node-type='publish']").click()
    AttributeError: 'list' object has no attribute 'click' 老师能帮忙看下嘛?
    另外,一直在刷一直在刷 微博不让登录来,课后练习后面补上
    2019-04-23
    2
    1
  • 梁林松
    我发现只要直接点击私信 udi就出现了。
    https://api.weibo.com/chat/#/chat?to_uid=1890826225
    2019-03-11
    1
  • third
    问题
    1.可能是我不玩微博的原因吧,为什么我点击每天学点心理学主页的左边关注后面的1884976粉丝,得到的是https://weibo.com/p/1005051890826225/follow?relate=fans&from=100505&wvr=6&mod=headfans&current=fans#place这个网址?,怎么才能得到https://weibo.com/1890826225/fans
    2.强制等待1s主要是为了什么呢?是为了,防止反爬机制吗?那如果这样,设置成随机强制休眠是不是会更好?
    3.我反复测试,好像被微博发现了,现在进不去微博了。然后等一时间又能进去了
    4.当我进入微博的主页的时候,并没有保持登录状态,变成了无登录状态,要设置成保持登录状态吗?
    5.作业
    def unfollow(uid):
        browser.get('https://m.weibo.com/u/'+str(uid))
        already_concerned_button=browser.find_element_by_xpath("//div[@class='m-diy-btn m-box-col m-box-center m-box-center-a'][1]//span")
        already_concerned_button.click()
        time.sleep(1)
        unfollow_buttom=browser.find_element_by_xpath("//div[4]//li[2]")
        unfollow_buttom.click()
        time.sleep(1)
        confirm_buttom=browser.find_element_by_xpath("//div[@class='m-box-col'][2]")
        time.sleep(1)
    uid='1890826225'
    # add_follw(uid)
    unfollow(uid)
    2019-03-09
    1
  • 王彬成
    css_selector定位总结
    https://www.cnblogs.com/yahutiaotiao/p/8044849.html
    2019-03-09
    1
  • 梁林松
    给打家介绍一个XPath的小窍门: 下载 XPath Helper插件,安装后 在网页上选取想要提取的元素, 点击右键 选中 检查 然后 开发者工具自动打开 你可以看到 HTML代码 ,选中然后再次点击右键,选中copy 里的 copy to xpath这样就得到了xpath的值了。
    2019-03-08
    2
    1
  • 课后练习取消关注模块:
    # 取关指定的用户
    def unfollow(uid):
        browser.get('https://m.weibo.com/u/'+str(uid))
        time.sleep(1)
        unfollow_button = browser.find_element_by_xpath('//*[@id="app"]/div[1]/div[4]/div[2]/div/div[1]/div')
        unfollow_button.click()
        time.sleep(1)
        # 选择取消关注
        uf_button = browser.find_element_by_xpath('//*[@id="app"]/div[1]/div[4]/div[2]/div/div[1]/div/div/ul/li[2]/div')
        uf_button.click()
        time.sleep(1)
        # 确定取消
        confirm_button = browser.find_element_by_xpath('//*[@id="app"]/div[2]/div[1]/div[2]/footer/div[2]/a')
        confirm_button.click()
        time.sleep(1)
        
    # 每天学点心理学 UID
    uid = '1890826225'
    unfollow(uid)
    2019-03-08
    1
  • 白夜
    老师,我想问问,每天学点心理学 里的内容,是从哪里找来的?不怕被举报抄袭吗
    2019-03-08
    1
    1
  • Lisa
    selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"textarea.W_input"}
      (Session info: chrome=76.0.3809.132)
    这个报错怎么处理???
    2019-08-29
    1
  • 周志翔
    可能是这个网站用的比较多了,xpath定位变了
    2019-07-23
  • 董大琳儿
    NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//div[@class="m-btn m-btn-white m-btn-text-black"]"}
      (Session info: chrome=75.0.3770.100),,,一直在报错
    2019-06-28
    1
  • ping
    通过同样的方法,你可以查看“取消”这个按钮对应的 HTML , 但是就是没找到:
    no such element: Unable to locate element

    2019-04-28
  • 随便讲两句
    关注/取消关注用 [ https://m.weibo.cn/profile/:uid ] 这个页面也很方便。

    # 取消关注
    def unfollow(uid):
        browser.get('https://m.weibo.cn/profile/' + str(uid))
        browser.implicitly_wait(5)
        time.sleep(1)
        browser.find_element_by_xpath("//a[@class='m-btn m-btn-block m-btn-lite-white']").click()
        time.sleep(1)
        browser.find_element_by_xpath("//a[@class='m-btn m-btn-white m-btn-text-orange']").click()
        time.sleep(1)
    2019-04-03
收起评论
16
返回
顶部