本文来自 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那么少啊(逃
相关推荐
本主题聚焦于使用Python来爬取移动端的新浪微博信息。以下是对这一知识点的详细阐述: 首先,我们需要理解Python为何适合网络爬虫。Python语言具有丰富的库支持,如BeautifulSoup、Requests和Scrapy,这些库简化了...
基于python爬取新浪微博爬虫以及生成词云源代码+文档说明(完整高分项目)基于python爬取新浪微博爬虫以及生成词云源代码+文档说明(完整高分项目)基于python爬取新浪微博爬虫以及生成词云源代码+文档说明(完整...
爬取新浪微博转发数,评论,点赞数等,用selenium,可以控制程序只能在指定时间内运行,只要有对应版本的chromedriver就行
**Python-爬取新浪微博信息** 在信息技术领域,网络爬虫是一种自动提取网页数据的程序,它们可以帮助我们收集、分析大量的互联网信息。在这个项目中,我们将专注于使用Python来爬取新浪微博的数据,尤其是账户下的...
基于python爬取新浪微博爬虫以及生成词云源码.zip基于python爬取新浪微博爬虫以及生成词云源码.zip基于python爬取新浪微博爬虫以及生成词云源码.zip基于python爬取新浪微博爬虫以及生成词云源码.zip基于python爬取...
利用python爬取微博内容,能够做到爬取任意关键字下的全部微博内容
这篇文章主要介绍了python爬虫之爬取新浪微博源代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下。这篇文章主要介绍了python爬虫之爬取新浪微博源代码...
基于python爬取新浪微博爬虫以及生成词云代码+文档说明(高质量代码),含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来,简单部署,就...
【标题】:“新浪微博爬虫,用python爬取新浪微博数据” 【描述】:“此项目是关于如何使用Python编程语言构建一个爬虫,以抓取并分析新浪微博上的数据。爬虫技术在大数据时代对于获取社交媒体信息、进行网络数据...
基于python爬取新浪微博爬虫以及生成词云源码+源代码+文档说明(高分项目)本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、...
在实际操作中,我们通常会将爬虫代码组织成模块化的结构,比如定义一个User类来封装用户的登录和信息抓取逻辑,再创建一个Spider类来管理多个User实例,实现多线程或异步任务的爬取。在本项目`weiboSpider-master`中...
3. **异常处理**:在爬取过程中,可能会遇到各种异常,如网络错误、编码问题等,需要编写合适的异常处理代码,确保程序在遇到问题时能优雅地退出或重试。 4. **数据存储**:抓取到的数据通常会存储为文本文件、...
[python爬虫] Selenium爬取新浪微博内容及用户信息 http://blog.csdn.net/eastmount/article/details/51231852 [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上) 主要爬取内容包括: 新浪...
python实现的爬取热门微博评论并进行数据分析项目源码(高分大作业)专为大学期间课程设计和期末大作业开发的高分设计项目,可作为高分课程设计和期末大作业的参考,含有代码注释小白也可看的懂,有能力的小伙伴也...
在这个特殊的项目中,“weibo_spider_spider”指的是一个针对微博平台定制的爬虫程序,它能有效地爬取微博上的信息以及相关的评论。 微博是中国最流行的社交媒体平台之一,用户在这里发布、分享和评论各种信息,...
基于python爬取新浪微博爬虫以及生成词云源码+源代码+文档说明 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心...