`

90行代码爬取我的微博

 
阅读更多

本文来自 fairjm@iteye 转截请注明出处


这90行代码写了大半年,本来年初就能写好的,结果懒癌发作一病不起,昨天突然惊醒,已经过了半年了,这半年来也没业余好好写代码,发的文章也是划水性质,不能再这么下去了.

 

初衷其实挺简单的,看自己发了1w+的微博,想着哪天不见了青春的记忆就荡然无存,实在太可惜了,保存到本地方便追溯.

 

目标是 http://weibo.com/xxxx/profile所有页码的内容.

 

那要怎么干呢,我们知道微博的异步页面渲染用的是接口返回html数据拼接的方式,一般需要构造请求然后自行拼接html,但一页就要请求两次,而且如何拼接要看js是怎么处理的...



 

 

实在是过于麻烦了,还不如自己登上去然后保存一下页面呢.  

于是就会有这样的操作: 

    1.登陆http://weibo.com  
    2.进入profile页面  
    3.键盘输入End一次,加载页面  
    4.再输入End一次,加载页面到这页底部.  
    5.保存   
    6.点下一页,回到步骤3.没有下一页就结束  
 

但我有350多页,自己操作一定会手酸,何不让程序帮我们完成?

 

查阅了一下找到了个工具canopy,基于Selenium的F# web UI测试框架.
因为不知道微博做了什么限制,我需要偶尔看一下程序的进度,所以我还是需要界面的,选择了chrome的webdriver(注意需要使用最新版,不然测试插件会无法工作).

接下来我们就只需要略生硬地翻译一下上面的步骤就可以啦.

chromeDir <- @"D:\webdriver\chrome"  
 首先设置一下webdriver所在的目录.

 

start chrome
url "https://weibo.com"
waitFor (fun () -> 
        let now = currentUrl()
        now.Contains("/profile"))

启动chrome,跳转到weibo.com 登陆自己完成,然后点击自己的微博跳转到profile页,上面代码如果不在profile页会进行等待.

 

press Keys.End  

按下end 这边可能需要等待一下加载完毕再按下一个End,要按两次拿取一页完整的页面.
然后得到页面文本~

 

let getHtml () =
    let ele = element "html"
    ele.GetAttribute("outerHTML")
 
 

接下去我要获得下一页的地址,查看了下html得到css选择器的写法: 

let getNextPageElement () =
    try
        Some(element "a.page.next")
    with
        _ -> None
 

... ...(省略文件保存 等等操作)

 

满心欢喜,写好了,开始运行,看着文件夹下html慢慢增加,还是挺开心的,突然程序停了,看了下浏览器在加载的时候卡住了,刷新了下页面才继续加载.

 

因为程序判断了End两次只要要能获取到下一页才会继续,网页卡在加载根本没把下一页的按钮渲染出来,自然就不行了.想了想还是应该降低速度,增大end的等待时间以及加上错误重试的功能才比较科学,再完善了一下滚到页底的方式:

let pressToProfileEnd () =
    let pressIt() =
        pressEnd()
        sleep 4
        pressEnd()
        sleep 4
        pressEnd() //保险起见 再来一次
        sleep 4
    pressIt()
    // try it again
    let notHasNext = getNextPageElement().IsNone
    if notHasNext then
        reload()
        pressIt()  
 

接下去就看着浏览器慢慢滚动,网页一页页被保存到目标文件了,这年末年初的坑终于也是给填上了,不免松了一口气.

 

(完整代码见:https://github.com/fairjm/fsharpSnippet/blob/master/WeiboProfileCrawler.fs)

Ps:这90行可是包含了空行和注释~爬点东西工具对了代码也可以像python那么少啊(逃

  • 大小: 120.7 KB
0
1
分享到:
评论

相关推荐

    爬取移动端微博信息 简易Python代码

    本主题聚焦于使用Python来爬取移动端的新浪微博信息。以下是对这一知识点的详细阐述: 首先,我们需要理解Python为何适合网络爬虫。Python语言具有丰富的库支持,如BeautifulSoup、Requests和Scrapy,这些库简化了...

    Python爬取新浪微博转发数等

    爬取新浪微博转发数,评论,点赞数等,用selenium,可以控制程序只能在指定时间内运行,只要有对应版本的chromedriver就行

    Python-爬取新浪微博信息

    **Python-爬取新浪微博信息** 在信息技术领域,网络爬虫是一种自动提取网页数据的程序,它们可以帮助我们收集、分析大量的互联网信息。在这个项目中,我们将专注于使用Python来爬取新浪微博的数据,尤其是账户下的...

    基于python爬取新浪微博爬虫以及生成词云源码.zip

    基于python爬取新浪微博爬虫以及生成词云源码.zip基于python爬取新浪微博爬虫以及生成词云源码.zip基于python爬取新浪微博爬虫以及生成词云源码.zip基于python爬取新浪微博爬虫以及生成词云源码.zip基于python爬取...

    python爬取新浪微博源代码

    利用python爬取微博内容,能够做到爬取任意关键字下的全部微博内容

    python爬虫之爬取新浪微博源代码.7z

    这篇文章主要介绍了python爬虫之爬取新浪微博源代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下。这篇文章主要介绍了python爬虫之爬取新浪微博源代码...

    基于python爬取新浪微博爬虫以及生成词云代码+文档说明(高质量代码)

    基于python爬取新浪微博爬虫以及生成词云代码+文档说明(高质量代码),含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来,简单部署,就...

    新浪微博爬虫,用python爬取新浪微博数据.zip

    【标题】:“新浪微博爬虫,用python爬取新浪微博数据” 【描述】:“此项目是关于如何使用Python编程语言构建一个爬虫,以抓取并分析新浪微博上的数据。爬虫技术在大数据时代对于获取社交媒体信息、进行网络数据...

    基于python爬取新浪微博爬虫以及生成词云源码+源代码+文档说明(高分项目)

    基于python爬取新浪微博爬虫以及生成词云源码+源代码+文档说明(高分项目)本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、...

    python实现爬取新浪微博

    在实际操作中,我们通常会将爬虫代码组织成模块化的结构,比如定义一个User类来封装用户的登录和信息抓取逻辑,再创建一个Spider类来管理多个User实例,实现多线程或异步任务的爬取。在本项目`weiboSpider-master`中...

    新浪微博爬虫,用python爬取新浪微博数据,并下载微博图片和微博视频.zip

    3. **异常处理**:在爬取过程中,可能会遇到各种异常,如网络错误、编码问题等,需要编写合适的异常处理代码,确保程序在遇到问题时能优雅地退出或重试。 4. **数据存储**:抓取到的数据通常会存储为文本文件、...

    python新浪微博爬虫,爬取微博和用户信息 (源码)

    [python爬虫] Selenium爬取新浪微博内容及用户信息 http://blog.csdn.net/eastmount/article/details/51231852 [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上) 主要爬取内容包括: 新浪...

    python实现的爬取热门微博评论并进行数据分析项目源码(高分大作业)

    python实现的爬取热门微博评论并进行数据分析项目源码(高分大作业)专为大学期间课程设计和期末大作业开发的高分设计项目,可作为高分课程设计和期末大作业的参考,含有代码注释小白也可看的懂,有能力的小伙伴也...

    weibo_spider_spider_爬取微博_爬取微博评论_微博_weibospider_

    在这个特殊的项目中,“weibo_spider_spider”指的是一个针对微博平台定制的爬虫程序,它能有效地爬取微博上的信息以及相关的评论。 微博是中国最流行的社交媒体平台之一,用户在这里发布、分享和评论各种信息,...

    基于python爬取新浪微博爬虫以及生成词云源码+源代码+文档说明

    基于python爬取新浪微博爬虫以及生成词云源码+源代码+文档说明 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心...

Global site tag (gtag.js) - Google Analytics